为什么Number子类的表示范围是[-2^n ~ 2^n -1]

2020-11-25  本文已影响0人  Divenier

这就要结合补码的生成过程来看了。
以范围最小的byte为例,8个bit能够区分的不同数字上限是256个,但这256个数中间,必须包含0;
依照首位区分正负的规定,8个bit能表示的最大的正数就是0111_1111b,也就是127;同时,最小的负数应该是1111_1111b(-127),但1000_0000能表示的-0已经没有意义了,0000_0000已经把0表示的很好了,因此把它拎出来表示-128,使得8个bit能表示的数字范围变成了[-128,127];

来看-128的补码生成过程:

//-128:
-1000_0000(仅作示意)
1111_1111(除符号位外全部取反)
1000_0000(末尾加一 并进位)(补码)

-128的补码是特殊的,原是表示-0的,因此-128没有对应的反码和原码

上一篇下一篇

猜你喜欢

热点阅读