Java 中的正负

Positive negation in Java

如何在取反运算后,即~10(二进制:1010),结果不是-11,而是5,10 =二进制1010,取反后为0101或5。 谢谢你的帮助!

10的二进制表示不是1010,而是000...0001010(共32位)

因此否定是 111...1110101,即 -11。

如果你想得到5,你只需要保留最低有效的4位(并将其余所有重置为0):

int x = 10;
System.out.println (~x & 0xf);

对于更通用的解决方案,如果您只想取反 n 最低有效位(其中 n-1 是输入数字中最高 1 位的索引)并保留所有高位 0,你可以使用 Lino 的建议:

System.out.println (~x & ((Integer.highestOneBit(x) << 1) - 1));