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));

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...