int max = ~0;
What does it mean?
~
运算符是一元位补运算符,用于计算位补。这意味着它会反转其参数中的所有位(0变为1,1变为0)。因此,
int max = ~0;
这段代码将32位值0000 0000 0000 0000 0000 0000 0000 0000
取反并赋值给max
,结果为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。
~是补码运算符,它会翻转运算数的比特位。由于0没有任何比特位被设置,补码将会把所有比特位都设置为1,这也是最大的整数(假设是无符号的)。对于有符号的数字,你会得到-1而不是最大值,所以称其为“max”有点不准确。
字面上的0(如上述代码中)是一个int类型。
int类型是32位二进制值。数值0将所有位设置为0。
~运算符是按位补码。即将所有位取反。
因为所有位都是0,所以它们都变成了1。因此,我们得到了一个32位值
其所有位都被设置为1。
C#使用二进制补码。它将-1编码为int类型的所有位都为1。
0000 0000 0000 0000 0000 0000 0000 0000 == 0
operator ~
1111 1111 1111 1111 1111 1111 1111 1111 == -1
~0 == -1
~表示按位取反,它会翻转给定整数中的所有位。在有符号整数中,这将给出-1(因为整数中的所有位都从0翻转为1)。查找二进制补码以获取更多信息。
在无符号整数(uint)中,这将给您一个整数的最大值(因为无符号整数中的最高有效位不确定符号)。
如前所述,~0 的结果为 0xFFFFFFFF。
然而,我怀疑原始程序员可能存在困惑。执行 int max = ~0 ;
将有符号整数 max
设置为值 -1。
正如其他人所说,~是按位取反运算符。它将获取整数值的所有位并切换0和1(0-> 1,1-> 0)。
对于有符号整数或Int32,~0等于-1。
通常情况下,当您实现某种基于层的过滤系统时,要使用~0或-1作为“全部包含”掩码(星号),其中您使用“layerMask”参数,默认情况下等于-1,这意味着它将返回任何内容(不进行过滤)。该过滤器确实使用AND操作(valueToFilter&layerMask)。
如果valueToFilter也非零,则valueToFilter&-1始终为非零。否则为零。
why -3==~2
(https://dev59.com/jm855IYBdhLWcg3wNhd1) - Javed Akram