为何C语言中char类型for循环c<128无限循环,c<127则正常?
两段C代码运行表现差异的原因分析
第一段(无限循环)代码:
#include <stdio.h> int main() { for (char c=0; c<128; c++) { printf("%c", c); } }
第二段(正常运行)代码:
#include <stdio.h> int main() { for (char c=0; c<127; c++) { printf("%c", c); } }
差异核心原因在于有符号char的取值范围与溢出行为:
- 绝大多数C编译器中,
char默认是有符号8位整数,取值范围是-128到127。 - 第一段代码循环条件为
c<128:当c递增到127时,执行c++会触发有符号整数溢出。在补码实现的系统中,127加1会绕回成-128,而-128 < 128永远为真,导致循环无法终止,陷入无限循环。 - 第二段代码循环条件为
c<127:当c递增到126时,执行c++后变为127,此时127 < 127不成立,循环正常退出,不会出现无限循环。
内容的提问来源于stack exchange,提问作者CuriousCurry
相关产品推荐
相关产品推荐

