微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 中的正否定

如何解决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));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。