【发布时间】:2013-07-15 03:23:42
【问题描述】:
假设 a=1
1+(-1) =0
但使用 4 位二进制,使用 2 的补码
0001+1111=10000 ~ 0000
有符号整数溢出不是未定义的行为吗?
对于这种微不足道的结果,我们是否依赖未定义的行为,或者我错过了什么。
from wikipedia: 如果左边的两个进位位(在这些示例中位于顶行最左侧的位)均为 1 或均为 0,则结果有效;如果左两个进位位是“1 0”或“0 1”,则发生符号溢出。
【问题讨论】:
-
为什么这与 8 位、16 位等有什么不同?如果你将
000...01添加到111...11你会得到000...00。 -
这可能有助于讨论进位和溢出:en.wikipedia.org/wiki/Two's_complement#Addition
-
当您添加带有相反信号的有符号数时,永远不会出现溢出,您看到的是进位数传播以使更大的容器能够正确运行。
-
“编辑:来自维基百科链接”哪个链接?
-
当维基百科谈到左边的两个进位时,它清楚地指出它们不是在你的例子中最左边的那个。再次查看维基百科页面
11111 111 (carry)
标签: c++ c binary overflow twos-complement