C# int max=~0;这是什么意思?
int max=~0C# int max=~0;这是什么意思?,c#,bitwise-operators,C#,Bitwise Operators,int max=~0 这是什么意思?操作符是位逆的,~0给出一个包含所有1的整数值(二进制) 它是字节0000…0000的位求反。它是一个整数的值,其中所有位都设置为1 在未签名的情况下,它将是可能的最大值。在有符号情况下,它是-1。~是补码运算符,它翻转操作数的位。由于零没有设置任何位,所以补码将设置所有位,这也是最大大小的整数(假定为无符号)。对于有符号的数字,你会得到-1,所以称它为“max”有点用词不当 按位补码。 文字0(如上面代码中所示)是一个整数。 int是32位二进制值。值0将
这是什么意思?操作符是位逆的,~0给出一个包含所有1的整数值(二进制) 它是字节0000…0000的位求反。它是一个整数的值,其中所有位都设置为1
在未签名的情况下,它将是可能的最大值。在有符号情况下,它是-1。~是补码运算符,它翻转操作数的位。由于零没有设置任何位,所以补码将设置所有位,这也是最大大小的整数(假定为无符号)。对于有符号的数字,你会得到-1,所以称它为“max”有点用词不当 按位补码。
文字0(如上面代码中所示)是一个整数。
int是32位二进制值。值0将所有位设置为0 ~运算符是一种按位恭维。i、 e.我交换所有位。
因为所有的位都是0,所以它们都变成了1。所以我们有一个32位的值
将所有位设置为1 C#夏普使用两种恭维语。它将整数中的-1编码为所有位为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)。有关这一个的更多信息,请查阅2的补码
在无符号整数(uint)中,这将为您提供整数的最大值(因为无符号整数中的最高有效位不确定符号)。如前所述,~0产生0xFFFFFF
然而,我怀疑最初的程序员是困惑的。执行
intmax=~0
将有符号整数max
设置为值-1。运算符是计算位补码的一元位补码运算符。这意味着它反转参数中的所有位(0变为1,1变为0)。因此,
它将max
设置为32位值0000 0000 0000
的求反,从而产生1111111111111111111111111111111111111111
。当我们将此结果存储在Int32
中时,这与-1
相同
是否说得更好
int max = ~0;
或
取决于上下文。如果
max
的点是有一个所有位都是1
的数字,我会选择前者。如果max
的目的是计算非负整数列表的最大值,我会选择后者(好吧,我更喜欢int max=Int32.MinValue;
,更重要的是,我更喜欢int max=list.max();
)。正如其他人所说,~是位求反运算符。它将获取整数值的所有位,并切换0和1(0->1和1->0)
~0等于有符号整数或Int32的-1
在实现某种基于层的过滤系统时,通常使用~0或-1作为“全包”掩码(星号),其中使用默认等于-1的“layerMask”参数,表示它将返回任何内容(不过滤)。过滤器确实使用了AND操作(valueToFilter&layerMask)
如果valueToFilter也为非零,则valueToFilter&-1将始终为非零。否则为零。看看这个
为什么-3==~2
()
int max = ~0;
int max = -1;