【问题标题】:Simple Binary Overflow Addition简单的二进制溢出加法
【发布时间】:2013-10-31 00:33:16
【问题描述】:

如果我有

0010 1101

0110 1111

____+

1001 1100

是否溢出?因为第一个数字的符号变成1,1代表负数?我的二进制很弱。

如果添加会怎样

1111 1111

1111 1111

___+

1111 1110

带有不是溢出的进位 1?因为1111 1110代表-2?

感谢您的帮助!

【问题讨论】:

    标签: binary overflow


    【解决方案1】:

    这取决于你如何对待你的价值——它是有符号的还是无符号的。如果它是无符号二进制,则不会溢出。如果签名为 1,则确实发生了溢出。

    我想我们是在谈论带符号的值,基本上,溢出是指由于二进制算术运算导致值改变其符号,结果超出最大-最小范围。

    【讨论】:

    • 感谢您的回答@Antoniossss,所以如果已签名,第一个是溢出的,第二个是不溢出的,对吗?
    【解决方案2】:

    如果您使用的是没有符号的普通二进制表示,则它不是溢出

    0010 1101->45
    0110 1111->111
    

    45+111 = 156。可以在[0, 255]范围内操作,则不溢出。

    如果您使用二进制补码,则范围从 -128 到 127,只有一种表示 0。然后这是溢出,因为 156 超出范围 [-128, 127]

    你不能只用第一位来表示符号,因为你有 10000000 和 00000000 表示 0 和 -0。您应该使用二进制补码来处理负数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多