我正在尝试为 AP 考试自学 Java,但偶然发现了一个我不太了解的部分。
有一个盒子分为 8 个部分,代表 8 位存储。第一个有 0,后面的七个框有 1。为什么 -2^7 - (2^7)-1 的可能值是 -128 - 127?为什么不直接打开第一位并使其变为-2^8 - 2^8?请以最简单和彻底的方式解释。我已经在网上阅读了一些关于此的答案,但我不明白。这也是我书中的第一部分,他们没有很好地解释。
谢谢!
它是一个组合问题。如果你手上有 8 个手指,你可以向其他人展示多少种可能的手指组合?答案是 2^8。即 2 * 2^7。因此,您有 2^7 个正数和 2^7 个负数,但您还必须显示零。这就是为什么你有 2^7-1 个正值和 2^7 个负值和零的原因。我希望这能很好地解释它。
Java字节表示为有符号字节,所以最左边的位代表数字的符号(正或负),所以只剩下7位。如果您使用所有 8 位(因此您可以达到 2^8),则您不能表示负数。
这个二进制补码表显示了这一点