2011-01-22 121 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也非零,则它总是非零。否则为零。