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

int max = ~0;

这是什么意思?

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

 int max = ~0; 

max设置为32位值0000 0000 0000 0000 0000 0000 0000 0000的否定,得到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(); )。

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

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

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

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

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

在unsigned int(uint)中,这将为您提供整数的最大值(因为unsigned int中的最高位不确定符号。)

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

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

按位补码。
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 

所以=> ~0 == -1

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

对于有符号整数或Int32,~0等于-1。

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

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