问题描述
如何在求反运算后,即 ~ 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));