【发布时间】:2014-08-18 20:50:25
【问题描述】:
我只是在搞乱Integer.toBinaryString(int) 方法。
当我传递一个正数比如 7 时,它输出 111 但是当我传递负数 7 时,它输出 11111111111111111111111111111001。我知道 Java 使用 2 的补码来表示负数,但为什么是 32 位(我也知道 int 是 32 位长但不适合答案)?
【问题讨论】:
-
所有
int值都是 32 位的,它会删除前导零,但对于负数,它将设置一个最高位。 -
这里没有加起来。你说你了解 2 的补码,但你不明白为什么负数的前导 1?
-
@OliCharlesworth:我的意思是你为什么要将其余所有位添加为 1 而不是一个有符号位?
-
@Vwin:因为这就是 2 的补码的工作原理。
-
我明白你的意思,但你说错了。 2 的补码与前面加 1 无关。这是因为正如@peter 所说,例如 7 的数字有前导 0,它们被反转为所有 1
标签: java integer bit-manipulation