可能重複:
What is the tilde (~) in a C# enumeration?代字符在表達式中的含義是什麼?
我發現下面的代碼有點this MSDN頁面上。
(((Width * Planes * BitCount + 31) & ~31)/8) * abs(Height)
這實際上確實在C#visual studio 2010中進行了編譯。究竟是在號碼31前面的代字號「〜」是什麼?我從來沒有在表達式中看過這個語法。
可能重複:
What is the tilde (~) in a C# enumeration?代字符在表達式中的含義是什麼?
我發現下面的代碼有點this MSDN頁面上。
(((Width * Planes * BitCount + 31) & ~31)/8) * abs(Height)
這實際上確實在C#visual studio 2010中進行了編譯。究竟是在號碼31前面的代字號「〜」是什麼?我從來沒有在表達式中看過這個語法。
這是bitwise complement運營商,也被稱爲按位否定。
這是bitwise complement operator。
基本上,它翻轉位:
0xffff0000 == ~0x0000ffff
在代碼您已發佈,做& ~31
確保最後5位是0(按位和11111的補體,其是00000的)。
~
- bitwise NOT operator,基本上以二進制格式位取反
31是11111,因此〜31 == 00000,基本爲0
+1,因爲這是最容易理解和最清晰的答案。 –
該示例不正確,因爲前導零也被反轉。即'〜31 =〜0x0000001F = 0xFFFFFFE0' – JimiLoe
這個例子不正確 31的二進制補碼是00000000000000000000000000011111(十六進制是0000001F - 如果計算32位)並且「〜」運算符翻轉這些位,所以答案將是11111111111111111111111111100000如果我們將它轉換爲十進制,答案是-32 如果64,31的二進制補碼是0000000000000000000000000000000000000000000000000000000000011111和「〜」翻轉位,這又是等同於-32。 AFAIK沒有運行C#的6位個人電腦,爲什麼你錯了。 如果有6位PC,這是正確的。 –
這是按位補運算符 - 它只是使所有0位到1秒反之亦然......見MSDN reference。
在特定情況下,它只是創建(31 = 0x1F
):
~0x1F = 0xFFFFFFE0
它是用來與bitwise and (&)
從而bascially它取消了最後5位。
〜31 = 31,在這種特定的情況下,按位否定是用來保持爲零(Width * Planes * BitCount + 31)
第一(從LSB)的5位您談談您得心應手ISO/IEC 23270:2006 — Information technology — Programming languages — C#複製和轉§ 14.6。神聖的寫作4。在那裏,你會發現:
14.6.4按位補運算符
對於應用〜X,一元運算符重載解析(§14.2.3)形式的操作來選擇特定的運算實現。的操作數轉換爲參數類型所選擇的操作者的,結果的類型是運營商的返回類型。預定義的按位補碼運算符爲:
int operator ~(int x) ;
uint operator ~(uint x) ;
long operator ~(long x) ;
ulong operator ~(ulong x) ;
對於這些運算符中的每一個,運算結果都是x的按位補數。
每個枚舉類型E隱式提供下列按位求補運算符:
E operator ~(E x);
評估~x
,其中x
是枚舉類型E
的具有基礎類型U
表達式的結果,是完全一樣評估unchecked((E)(~(U)x))
。當操作數類型是枚舉類型E
(§14.2.3)時,此運算符僅由一元運算符重載分辨率考慮。
擡升(§14.2.7)上面定義的未提升預定按位求補運算符的形式也預先確定。
在你的情況~31
是一樣的~ 0x0000001F
。 0x0000001F
的按位成分是0xFFFFFFE0
。爲什麼他們不會寫出他們想要的真正的面具超出了我的想象。
它的按位補充。請參閱下面的鏈接。 [如何進行按位補運算符工作] [1] [1]:http://stackoverflow.com/questions/791328/how-does-the-bitwise-complement-operator-work – Nerdtron
對於未來的參考這裏是c#操作符的列表。 [C#運營商](http://msdn.microsoft.com/en-us/library/6a71f45d.aspx) –