简单的二进制溢出添加

时间:2013-10-22 08:30:29

标签: binary overflow

如果我有

0010 1101

0110 1111

____ +

1001 1100

是否溢出?因为第一个数字的符号变为1而1代表负数?我在二元方面很弱。

如果添加

怎么办?

1111 1111

1111 1111

___ +

1111 1110

进纸1不是溢出?因为1111 1110代表-2?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这取决于您对待价值的方式 - 是签名还是未签名。如果是无符号二进制,则不是溢出。如果它是签名的,则确实发生了溢出。

我想我们正在讨论有符号值,而不是基本上,溢出是当值由于二进制算术运算而改变其符号时,结果超出了max-min范围。

答案 1 :(得分:0)

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

0010 1101->45
0110 1111->111

45 + 111 = 156.您可以在[0,255]范围内操作,然后它不会溢出。

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

您不能只使用第一位来表示符号,因为您有10000000和00000000表示0和-0。您应该使用两个补码来操作负数。