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

4

int max = ~0;

What does it mean?


看看这个 why -3==~2 (https://dev59.com/jm855IYBdhLWcg3wNhd1) - Javed Akram
8个回答

8
< p > ~ 运算符是一元位补运算符,用于计算位补。这意味着它会反转其参数中的所有位(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();)。


5

~运算符是位反转操作符,因此~0会给你一个二进制中所有位都是1的整数值。


5

这是对字节0000....0000按位取反的结果。它是一个整数,所有位都被设置为1。

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


4

~是补码运算符,它会翻转运算数的比特位。由于0没有任何比特位被设置,补码将会把所有比特位都设置为1,这也是最大的整数(假设是无符号的)。对于有符号的数字,你会得到-1而不是最大值,所以称其为“max”有点不准确。


3
按位取反。
http://msdn.microsoft.com/en-us/library/d2bd4x66.aspx

字面上的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

3

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

在无符号整数(uint)中,这将给您一个整数的最大值(因为无符号整数中的最高有效位不确定符号)。


3

如前所述,~0 的结果为 0xFFFFFFFF。

然而,我怀疑原始程序员可能存在困惑。执行 int max = ~0 ; 将有符号整数 max 设置为值 -1。


0

正如其他人所说,~是按位取反运算符。它将获取整数值的所有位并切换0和1(0-> 1,1-> 0)。

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

通常情况下,当您实现某种基于层的过滤系统时,要使用~0或-1作为“全部包含”掩码(星号),其中您使用“layerMask”参数,默认情况下等于-1,这意味着它将返回任何内容(不进行过滤)。该过滤器确实使用AND操作(valueToFilter&layerMask)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接