然呀然啊 2024-10-15 17:34 采纳率: 87.5%
浏览 10
已结题

为什么这里表示的补码是-128

为什么这里表示的补码是-128?只有八位,红色标出的1不应该溢出了吗,为什么红色标出的1还可以表示符号位?黑色标出的1为什么不表示符号位?

img

  • 写回答

2条回答 默认 最新

  • 兔子的洋葱圈 2024-10-15 17:46
    关注

    由于计算机无法识别符号,最好的处理方式就是让符号位也参与运算。
    原码在处理负数的时候会出现问题

    # 原码计算 1 + -1 = -2
    0001 + 1001 = 1010
    

    反码可以解决负数问题,但是会出现-0和0,值都是0,却有两个表示,

    # 反码计算 1 + -1 = -0
    0001 + 1110 = 1111
    # 反码1111转为原码:1000
    # 0000和1000分别是0和-0
    

    补码可以解决0的两种表示的问题

    # 补码计算 1 + -1 = 0
    0001 + 1111 = 1000
    # 补码1000转为原码是0000
    

    补码计算会多一个数,1000可以用来表示-8

    # 补码计算 -1 + -7 = -8
    原: 1001 + 1111
    补: 1111 + 1001 = 1000
    

    由于计算上面补计算的时候,有一个进位因为位数限制,展示不出来,所以1000在转换为原码的时候,会出现缺位。实际上应该是由5位的11000转为反码10111,再转为原码11000。
    所以补码4位最大值为7,最小值是-8。
    上述应用到8位也是一样的道理,最小值-128

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月27日
  • 已采纳回答 10月19日
  • 创建了问题 10月15日