为什么它不是一个无限循环,因为循环计数器在整数变量范围之外?

Sah*_*hil 0 c c++ loops while-loop

{
int i=1;
while(i<=32767)
{
printf("%d",i);
i=i+1;
}
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个简单的程序打印1到32767 ...但当我达到32767 ...在递增值1 .....它试图转到32768,它超出整数范围,并转到另一侧是-32768 .....由于哪个条件变为真,因为我<= 32767即-32768 .....所以它应该作为无限循环工作.我的Dev C++编译器只打印1到32767 ....它不能作为无限循环.任何人

Eri*_* J. 10

据推测,平台上整数的大小> 16位.

ISO/IEC 9899:201x状态

int类型对象的最小值

INT_MIN -32767 // - (2 15 - 1)

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

事实上,如今大多数平台上的大多数C编译器都会有比16位更大的整数.

在C中,保证整数至少为 16位.假设它是特定大小是危险和不可移植的.经常检查.

  • @ H2CO2标准还保证最大"INT_MIN"和最小"INT_MAX"值.所以`int`至少是16位宽. (5认同)
  • @ H2CO3:否.自C89/90起,C标准中存在整数类型范围的最小限制. (2认同)