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

字符与整数相乘后赋值给字符变量为何得到-124?

字符变量与整数相乘后赋值的截断与溢出解析

先看你给出的代码:

char p= (98*'b') ;
printf("%d",p);

一步步拆解原因:

  1. 计算原始值
    'b'的ASCII码值是98,所以98*'b'等价于98*98=9604,这个结果是int类型(C语言中整数运算会自动提升到int,不会溢出)。

  2. 赋值给char时的截断
    多数系统中char是8位有符号整数,取值范围是-128到127。当把9604赋值给char时,只会保留数值的最低8位:

    • 计算9604对256(2^8)取模,得到132。
    • 132的8位二进制是10000100,最高位是符号位(1代表负数),按照补码规则转换为十进制就是132-256=-124。
  3. 关于你提到的“溢出”
    这里确实发生了溢出,但不是乘法运算时的溢出(9604远小于int的取值范围),而是赋值到窄类型时的溢出截断。C标准中,有符号整数溢出属于未定义行为,但多数编译器会直接保留最低n位并按有符号规则解析,最终就得到了-124这个结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:34:57