我有以下代码:
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/