You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:50:08