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

C语言printf直接传a+b为参数输出结果异常原因求解

C语言char类型运算输出差异原因解答

核心原因是C语言标准规定的**整数提升(Integer Promotion)**规则,具体逻辑如下:

  • char 属于低精度整数类型,在参与算术运算时,会被优先提升为int类型后再执行计算,该规则的目的是避免小整数运算中间溢出,同时适配CPU原生的整数运算位宽,提升执行效率。
  • 直接输出a + b时的执行逻辑:
    两个char类型的变量a、b会先分别转换为int类型(120、9转换为int后值不变),相加得到int类型的结果129,没有发生溢出,直接传给printf用%d格式符输出,得到结果129,该结果完全符合C标准定义,不属于异常输出。
  • 赋值给total后输出的执行逻辑:
    a + b得到的int类型129要存入占1字节的有符号char类型变量(常规有符号char取值范围为-128~127),超出合法取值范围后发生溢出截断,按补码规则截断后最终存储的值为-127,所以输出为-127。

常见误区提醒:很多开发者默认小整数类型的运算会在自身类型下直接完成,这是对C算术运算规则的错误理解,只要参与运算的操作数精度低于int,都会先执行整数提升再做计算。

内容的提问来源于stack exchange,提问作者Russell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:06:03