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

C语言中为何获取到字符的负整数等价物?代码问题咨询

为什么得到的是字符的负整数等价物?

这问题的核心很简单——你写反了ASCII码的计算顺序!

让我们拆解关键的那行代码:

printf("%d ",('0'-*(str+i)));

1. ASCII码的基础逻辑

在C语言里,字符本质上是对应ASCII表的整数:

  • 字符'0'的ASCII值是48
  • 数字字符'1'到'9'的ASCII值依次是49到57
  • 其他字符比如'k'是107,'a'是97

当你计算'0' - 某个字符时:

  • 如果是数字字符'2',就是48 - 50 = -2,这就是你看到的第一个负数结果
  • 如果是'k',就是48 - 107 = -59,和示例里的第二个输出完全对应
  • 只有当字符是'0'时,48 - 48 = 0,结果才是0

2. 如何得到正确的正整数等价物?

如果你想把数字字符转换成对应的正整数,应该反过来计算:

printf("%d ",(*(str+i) - '0'));

这样:

  • '2' - '0' = 50 - 48 = 2,得到正确的正整数
  • 非数字字符比如'k'会得到107 - 48 = 59,虽然不是有效数字,但结果变成了正数

3. 额外建议:过滤非数字字符

如果只想处理有效的数字字符,可以在循环里加个判断,避免输出无效的结果:

for(int i=0;i<2*numLength;i=i+2) {
    char c = *(str+i);
    if(c >= '0' && c <= '9') {
        printf("%d ",(c - '0'));
    } else {
        printf("[非数字字符] ");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:37:52