我有以下代码:
int b1 = 0b1011;
b1 = ~b1;
System.out.println(Integer.toBinaryString(b1));
但我没有得到预期的结果即。 100
我得到的是11111111111111111111111111110100
。
任何人都可以解释一下吗?
答案 0 :(得分:4)
您正在翻转一个由四个字节组成的整数,即32位。前28位最初为0.它们也会被翻转,这会导致您得到的数字。 在翻转之前:
b1 = 0b00000000000000000000000000001011
翻转后:
b1 = 11111111111111111111111111110100
为了摆脱不需要的1,你可以在翻转位之后逻辑地和b1
:
b1 = ~b1
b1 = b1 & 0b1111
答案 1 :(得分:1)
你没事
0b1011 与00000000000000000000000000001011
相同
反过来就是:
11111111111111111111111111110100
这样做是为了保持位长:
int b1 = 0b1011;
b1 = ~b1;
b1 = b1 & 0b1111;
final String x = String.format("%4s", Integer.toBinaryString(b1)).replace(' ', '0');
System.out.println(x);