C++ 尽管有符号整数溢出未定义,为什么每次都会出现turbo c环绕有符号整数溢出?

C++ 尽管有符号整数溢出未定义,为什么每次都会出现turbo c环绕有符号整数溢出?,c++,c,int,turbo-c,C++,C,Int,Turbo C,我已经做了很多次签名溢出,但每次都是turbo c环绕。 例如: #include <stdio.h> void main() { int i = 100000; printf("%d", i); getch(); } #包括 void main(){ int i=100000; printf(“%d”,i); getch(); } 输出为-31072,这是完成环绕时的预期输出。 二进制100000(dec)是11000011010100000,最后16位是存储

我已经做了很多次签名溢出,但每次都是turbo c环绕。 例如:

#include <stdio.h>

void main() {
  int i = 100000; 
  printf("%d", i);
  getch();
}
#包括
void main(){
int i=100000;
printf(“%d”,i);
getch();
}
输出为
-31072
,这是完成环绕时的预期输出。 二进制
100000(dec)
11000011010100000
,最后16位是存储
is
100001010100000
。在双补码表示法中,
100001010100000
-31072

您的示例没有包含任何带符号的溢出,因此没有未定义的行为

(假设INT_MAX小于100000。)

任务:

int i=100000;
执行从long类型(整型常量100000的类型)到int类型的隐式转换。此转换结果为实现定义的1(或实现定义的陷阱为信号)


1(引用自:ISO/IEC 9899:201x 6.3.1.3有符号和无符号整数3)
否则,新类型已签名,且无法在其中表示值;要么
结果是定义了实现或引发了一个定义了实现的信号。

您的示例没有包含任何有符号的溢出,因此没有未定义的行为

(假设INT_MAX小于100000。)

任务:

int i=100000;
执行从long类型(整型常量100000的类型)到int类型的隐式转换。此转换结果为实现定义的1(或实现定义的陷阱为信号)


1(引用自:ISO/IEC 9899:201x 6.3.1.3有符号和无符号整数3)
否则,新类型已签名,且无法在其中表示值;要么 结果是定义了实现或发出了定义了实现的信号。

请查看。它在解释未定义的行为方面做得很好,特别是谈到了未定义的行为,以及我们有时使用夸张来描述它的方式。它在解释未定义的行为方面做得很好,特别是谈到了未定义的行为以及我们有时使用夸张来描述它的方式。