jas*_*son 8

~操作是一元的按位补运算符,其计算位元补码.这意味着它会反转其参数中的所有位(0变为1,1变为0).从而,

int max = ~0;
Run Code Online (Sandbox Code Playgroud)

其被设置max到32比特值的否定0000 0000 0000 0000 0000 0000 0000 0000导致1111 1111 1111 1111 1111 1111 1111 1111.由于我们将此结果存储在a中Int32,因此与此相同-1.

是否更好说

int max = ~0;
Run Code Online (Sandbox Code Playgroud)

要么

int max = -1;
Run Code Online (Sandbox Code Playgroud)

取决于具体情况.如果要点的max是所有位的数字,1我会选择前者.如果max要计算非负整数列表的最大值,我会选择后者(好吧,我更喜欢int max = Int32.MinValue;,甚至更多,我更喜欢int max = list.Max();).


pay*_*yne 5

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


Gav*_*n H 5

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

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