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

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

作者: Divenier | 来源:发表于2020-11-25 10:48 被阅读0次

    这就要结合补码的生成过程来看了。
    以范围最小的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没有对应的反码和原码

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/gqsaiktx.html