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

C# int max=~0;这是什么意思?,c#,bitwise-operators,C#,Bitwise Operators,int max=~0 这是什么意思?操作符是位逆的,~0给出一个包含所有1的整数值(二进制) 它是字节0000…0000的位求反。它是一个整数的值,其中所有位都设置为1 在未签名的情况下,它将是可能的最大值。在有符号情况下,它是-1。~是补码运算符,它翻转操作数的位。由于零没有设置任何位,所以补码将设置所有位,这也是最大大小的整数(假定为无符号)。对于有符号的数字,你会得到-1,所以称它为“max”有点用词不当 按位补码。 文字0(如上面代码中所示)是一个整数。 int是32位二进制值。值0将

int max=~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;