java - 为什么java按位补码不能正确填充?

标签 java bit-manipulation

我有以下代码:

int b1 = 0b1011;
b1 = ~b1;
System.out.println(Integer.toBinaryString(b1));

但是我没有得到预期的结果即100

我得到的是11111111111111111111111111110100

谁能解释一下这一点吗?

最佳答案

您正在翻转一个由 4 个字节(即 32 位)组成的整数。前 28 位最初为 0。它们也会被翻转,从而得到您得到的数字。 翻转前:

b1 = 0b00000000000000000000000000001011

翻转后:

b1 = 11111111111111111111111111110100

为了消除不需要的 1,您可以在翻转位后进行逻辑 AND b1 操作:

b1 = ~b1
b1 = b1 & 0b1111

关于java - 为什么java按位补码不能正确填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36055302/

相关文章:

java - Android Studio,如何将 fragment 添加到我的选项卡菜单?

java - 如何在单个 Activity 中添加多个 onActivityResult() 而不转到其他 Activity?

c++ - 比特流到浮点型强制

mysql - 使用按位操作数在 MySQL 表中查找共享列表 ID

mysql - 计算mysql中重叠的按位列

java - 帮我连接java和oracle

java keyPressed事件在按下按键时不断触发

java - Ubuntu 终端中的 Gradle 从版本 6 降级到版本 5

c - 如何将整数与分数相乘

java - 优化 Long.bitCount