我正在为AP考试自学Java,但我偶然发现了一个我不太理解的部分。
有一个被分成8个部分的盒子,代表8比特的存储。第一个盒子有0,后面的七个盒子有1。为什么可能的值是-2^7 - (2^7)-1,即-128 - 127?为什么不打开第一个比特并将其设置为-2^8 - 2^8?请以最简单、最透彻的方式解释。我在网上读过一些关于这方面的答案,但我不明白。这也是我书中的第一部分,他们没有很好地解释。
谢谢!
发布于 2012-11-15 09:13:12
这是一个组合问题。如果你的手上有8个手指,你可以向另一个人展示多少种可能的手指组合?答案是2^8,也就是2* 2^7,所以你有2^7个正数和2^7个负数,但你也必须显示零。这就是为什么你有2^7-1个正值,2^7个负值和0。我希望这能很好地解释这一点。
发布于 2012-11-15 09:15:44
Java字节表示为有符号字节,因此最左边的位表示数字的符号(正数或负数),因此只剩下7位。如果全部使用了8位(因此可以达到2^8),则不能表示负数。
这个two's complement table显示了这一点
https://stackoverflow.com/questions/13390118
复制相似问题