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));
如何在取反运算后,即~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));