我已经做了很多次签名溢出,但每次turbo c包装。
例如:
#include <stdio.h>
void main() {
int i = 100000;
printf("%d", i);
getch();
}
输出是
-31072
,如果完成了wrappround,它就是预期的输出。在二进制中
100000(dec)
是11000011010100000
并且最后16位存储是
1000011010100000
。在双补体表示中1000011010100000
是-31072
。 最佳答案
您的示例没有包含任何带符号的溢出,因此没有未定义的行为。
(假设INT_MAX小于100000。)
任务:
int i=100000;
执行从类型long(整数常量100000的类型)到类型int的隐式转换。转换的结果是实现定义的1(或实现定义的陷阱是信号)。
1(引用自:ISO/IEC 9899-201x 6.3.1.3有符号和无符号整数3)
否则,将对新类型进行签名,并且不能在其中表示该值;或者
结果是实现定义的或引发实现定义的信号。
关于c++ - 为什么每次未定义有符号整数溢出时,turbo c环绕有符号整数溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41380391/