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

问题描述 投票:5回答:8

int max = ~0;

这是什么意思?

c# bitwise-operators
8个回答
8
投票

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


5
投票

〜运算符有点反转,所以~0给出一个带全1的整数值(二进制)。


5
投票

它是字节0000 .... 0000的逐位否定。它是一个整数的值,其中所有位都设置为1。

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


4
投票

〜是补码运算符,它翻转操作数的位。由于零没有设置位,因此补码将设置所有位,这也是最大大小的整数(假设无符号)。对于带符号的数字,你将获得-1,所以称它为“max”有点用词不当。


3
投票

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

在unsigned int(uint)中,这将给出整数的最大值(因为unsigned int中的最高位不确定符号。)


3
投票

如上所述,~0产生0xFFFFFFFF。

但是,我怀疑原来的程序员很困惑。执行int max = ~0 ;将有符号整数max设置为值-1。


3
投票

按位补码。 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
投票

正如其他人所说,〜是按位否定运算符。它将占用整数值的所有位并切换0和1(0 - > 1和1 - > 0)。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.