我已经做了很多次签名溢出,但每次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/

10-12 16:14