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
相关产品推荐
相关产品推荐

