美文网首页
补码问题

补码问题

作者: 小碧小琳 | 来源:发表于2018-11-10 22:30 被阅读0次

    为什么一个字节的存储范围是-128-127或者0到255呢。

    分析:1字节8个位,
    0000 0000 - 1111 1111 表示0 - 255

    那么按照道理说,如果第一位表示正负的话,应该这么表示
    0 0000000 - 0 1111111 表示 0 - 127
    1 0000000 - 1 1111111 表示 -0 - -127
    应该是从-127到+127的呀。

    那么-128到127是怎么来的呢?

    这里涉及到二进制补码的问题。

    如上理解的话,+0,-0则重复了,浪费了一种存储的可能性。

    因此,计算机猴子那个的负数,不是照着后面的绝对值(符号位后面的所有位)直接乘以-1得到的。而是用补码规则换算的。

    负数 = 绝对值位 - 128
    比如,对于1 1111111 = 127 - 128 = -1
    同样,对于 1 0000000 = 0 - 128 = -128

    因此,最终结果,应该是-128 到 +127之间。

    ————————————————————————————————
    ————————————————————————————————

    总结:

    • 1个字节,8个位,范围:
      无符号:0 - 2^8 - 1 ==> 0 - 255
      有符号: - 2^7 ~ + 2^7 -1 == > -128 ~ + 127

    • 2个字节,16位,范围:
      无符号:0 - 2^16 - 1 ==> 0 - 65535
      有符号: - 2^15 ~ + 2^15 -1 == > -32768 ~ + 32767

    一般而言,设某类型N字节,则有8N位,
    无符号:0 - 2^8N - 1
    有符号: - 2^(8N - 1 ) ~ + 2^(8N - 1 ) -1

    相关文章

      网友评论

          本文标题:补码问题

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