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将始终为非零。 否则为零。