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

为何两个char类型变量相加后C语言程序输出负值?

问题解答

首先拆解问题的核心原因:

  • 字符的ASCII值计算:'a'的ASCII码是97,'b'是98,两者相加结果为97 + 98 = 195。
  • char类型的符号属性:C语言标准未强制规定char的符号性,但绝大多数主流编译器(如GCC、MSVC)默认将char视为有符号字符类型(signed char),其取值范围是-128 ~ 127。
  • 有符号整数溢出:195超出了signed char的最大值127,触发有符号整数溢出。按二进制补码规则,195的8位二进制是11000011,最高位的1作为符号位表示负数,转换为十进制即为-61——这就是程序输出负值的直接原因。

验证与解决方法

如果想要得到预期的正数值,可通过以下方式修改代码:

  1. 将char改为unsigned char,其取值范围为0 ~ 255,能容纳195的结果:
#include <stdio.h>

int main() {
    
    unsigned char a = 'a', b = 'b', c;
    
    c = a + b;
    
    printf("%d", c); // 输出195

}
  1. 或者用int类型存储相加结果,避免截断:
#include <stdio.h>

int main() {
    
    char a = 'a', b = 'b';
    int c;
    
    c = a + b; // a和b会自动提升为int类型,相加结果无溢出
    
    printf("%d", c); // 输出195

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:35:25