2011-01-22 119 views

回答

5

〜運算符有點逆,所以〜0給你一個整數值(全二進制)。

5

這是字節0000 ... 0000的按位否定。它是所有位設置爲1的整數的值。

在未簽名的情況下,它將是最大可能值。在簽署的情況下,它是-1。

4

〜是補碼操作符,它翻轉操作數的位。由於零沒有設置位,因此補碼將設置所有位,這也是最大大小的整數(假設爲無符號)。對於帶符號的數字,您將得到-1,所以將其稱爲「max」是有點用詞不當的。

3

按位補碼。
http://msdn.microsoft.com/en-us/library/d2bd4x66.aspx

文字0(如上面的代碼)是一個int。
int是一個32位的二進制值。值0的所有位都設置爲0.

〜運算符是一個按位順序的恭維。即我交換了所有的位。
如所有的位分別爲0它們都變成1。因此,我們有一個32位的值
設置爲1

C#尖銳用途2稱讚的所有位。其編碼-1在一個int,因爲所有的比特爲1

0000 0000 0000 0000 0000 0000 0000 0000 == 0 

operator ~ 

1111 1111 1111 1111 1111 1111 1111 1111 == -1 

所以=>~0 == -1

+0

關於負面投票的古董? – 2011-01-22 02:24:58

3

〜裝置按位不是,它在反轉給定整所有位。在一個帶符號的int中,這會給你-1(因爲int中的所有位將從0翻轉爲1)。查找二進制補碼以獲得更多關於這個的信息。

在一個unsigned int(UINT)這將給你一個整數的最大值(因爲一個unsigned int最顯著位沒有確定跡象。)

3

如前所述,0〜0xFFFFFFFF的產生。

但是,我懷疑原來的程序員很困惑。執行int max = ~0 ;將有符號整數max設置爲值-1。

8

~運算符是計算逐位補碼的一元位運算符。這意味着它將其參數中的所有位反轉(0變成1,1變成0)。因此,

int max = ~0; 

其被設置max,導致1111 1111 1111 1111 1111 1111 1111 1111 32位值0000 0000 0000 0000 0000 0000 0000 0000的否定。由於我們將此結果存儲在Int32中,因此與-1相同。

它是否不如說

int max = ~0; 

int max = -1; 

取決於上下文。如果max的點是要有一個數字的所有位是1我會選擇前者。如果max的點是計算非負整數列表的最大值,我會選擇後者(嗯,我更喜歡int max = Int32.MinValue;,甚至更喜歡,我只是更喜歡int max = list.Max();)。

0

正如其他人所說,〜是按位否定運算符。它將取整數值的所有位並切換0和1(0 - > 1和1 - > 0)。

對於有符號整數或Int32,〜0等於-1。

當您使用默認等於的「layerMask」參數實現某種基於圖層的過濾系統時,通常將〜0或-1用作「ALL inclusive」掩碼(星號) 1意味着它將返回任何東西(不過濾)。該過濾器確實使用AND操作(valueToFilter & layerMask)。

valueToFilter & -1如果valueToFilter也非零,則它總是非零。否則爲零。