c++ - 为什么while中的循环计数器超出了整型变量的范围,所以不是无限循环?

标签 c++ c loops while-loop

<分区>

{
int i=1;
while(i<=32767)
{
printf("%d",i);
i=i+1;
}
}

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

最佳答案

大概您的平台上整数的大小是 > 16 位。

ISO/IEC 9899:201x 状态

minimum value for an object of type int

INT_MIN -32767 // −(215 − 1)

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

事实上,如今大多数平台上的大多数 C 编译器都将具有大于 16 位的整数。

在 C 语言中,整数保证至少 16 位。假设它是特定尺寸是危险且不可携带的。始终检查。

关于c++ - 为什么while中的循环计数器超出了整型变量的范围,所以不是无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12787043/

相关文章:

c++ - 如何在不使用 join() 阻塞主线程的情况下创建多个 C++ 线程?

c++ - 在 Visual Studio 2012 C++ 项目中嵌入 Python

头文件中的 C++ 模板,实现文件 *.cc 中出现错误 "error: expected a class or namespace"

使用预构建的静态库进行编译

c - 如何使用 UDP 广播消息知道远程主机的 IP 地址?

java - Common Lisp 中的嵌套循环

javascript - 发牌循环达到确定的值(value)

ruby - ruby 中串联类型之间的区别

c++ - 为什么将 `const`修饰符应用于具有结构值的变量,会使结构值不可变?

c - scanf 导致无限循环