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