int max = ~0;这是什么意思?

时间:2011-01-22 00:14:22

标签: c# bitwise-operators

int max =〜0;

这是什么意思?

8 个答案:

答案 0 :(得分:8)

~运算符是一元按位补码运算符,用于计算按位补码。这意味着它会反转其参数中的所有位(0变为1,1变为0)。因此,

int max = ~0;

max设置为取消导致0000 0000 0000 0000 0000 0000 0000 0000的32位值1111 1111 1111 1111 1111 1111 1111 1111。由于我们将此结果存储在Int32中,因此与-1相同。

是否更好地说

int max = ~0;

int max = -1;

取决于上下文。如果max的点是一个数字,其所有位都是1我会选择前者。如果max的点是计算非负整数列表的最大值,我会选择后者(好吧,我更喜欢int max = Int32.MinValue;甚至更多,我更喜欢int max = list.Max();)。

答案 1 :(得分:5)

〜运算符有点反转,所以~0给出一个带全1的整数值(二进制)。

答案 2 :(得分:5)

它是字节0000 .... 0000的逐位否定。它是一个整数的值,其中所有位都设置为1。

在无符号情况下,它将是最大可能值。在签名的情况下,它是-1。

答案 3 :(得分:4)

〜是补码运算符,它翻转操作数的位。由于零没有设置位,因此补码将设置所有位,这也是最大大小的整数(假设无符号)。对于带符号的数字,你将获得-1,所以称它为“max”有点用词不当。

答案 4 :(得分:3)

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

文字0(如上面的代码所示)是一个int int是32位二进制值。值0将所有位设置为0。

〜运算符是一种有点恭维。即我交换了所有的位 由于所有位都为0,因此它们都变为1.因此我们有一个32位的值 将所有位设置为1。

C#sharp使用2赞美。在int中编码-1,因为所有位都是1

0000 0000 0000 0000 0000 0000 0000 0000   == 0

operator ~

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

So => ~0 == -1

答案 5 :(得分:3)

〜表示按位,它反转给定整数中的所有位。在一个带符号的int中,这将给你-1(因为int中的所有位将从0翻转到1.)查找二进制补码以获取有关此的更多信息。

在unsigned int(uint)中,这将给出一个整数的最大值(因为unsigned int中的最高位不能确定符号。)

答案 6 :(得分:3)

如上所述,~0产生0xFFFFFFFF。

但是,我怀疑原来的程序员很困惑。执行int max = ~0 ;将有符号整数max设置为值-1。

答案 7 :(得分:0)

正如其他人所说,〜是按位否定运算符。它将占用整数值的所有位并切换0和1(0 - > 1和1 - > 0)。

对于有符号整数或Int32,

~0等于-1。

通常使用~0或-1作为" ALL包含"掩码(星号),当你实现某种类型的基于图层的过滤系统,你使用" layerMask"默认情况下等于-1的参数,表示它将返回任何内容(不过滤)。过滤器确实使用AND操作(valueToFilter& layerMask)。

valueToFilter&如果valueToFilter也为非零,则-1将始终为非零。否则为零。