为什么Turbo C Wraparound每次签名的整数溢出,尽管签名的整数溢出是不确定的

Why turbo c wraparound signed integer overflow every time though signed integer overflow is undefined?

本文关键字:整数 溢出 不确定 Turbo 为什么 Wraparound      更新时间:2023-10-16

我已经签名多次,但每次涡轮c环绕。例如:

#include <stdio.h>
void main() {
  int i = 100000; 
  printf("%d", i);
  getch();
}

输出是-31072,如果围栏完成,则是预期的输出。在二进制100000(dec)中是11000011010100000,最后16位存储是1000011010100000。在两个补充表示中1000011010100000-31072

您的示例没有任何签名的溢出,因此没有不确定的行为。

(假设int_max小于100000。)

分配:

int i=100000;

执行来自类型长的隐式转换,即整数常数100000的类型到type int。转换的结果是实现定义 1 (或实现定义的陷阱是信号)。


1 (引用来自:ISO/IEC 9899:201X 6.3.1.3签名和未签名的整数3)
否则,将签署新类型,并且该值不能在其中表示;要么结果是实现定义的,或者提出了实现定义的信号。