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

C#中整型与字符型相加为何要减'0'才能得到正确结果?

数字字符参与算术运算时减去'0'的原理

所有char类型存储的本质是对应编码规则下的整数值,而非我们看到的字符图形本身。目前通用的ASCII、UTF-8、UTF-16等主流编码集,都遵循一个统一设计:'0'到'9'这10个数字字符的编码值是连续递增排列的,这是该写法成立的核心前提。

你最初的实现代码如下:

int i = 12;
char myChar = '4';
WriteLine(i + myChar);

char类型参与算术运算时,会自动隐式转换为自身对应的编码整数值参与计算。在ASCII规则下'4'对应的编码值是52,因此实际计算逻辑是12 + 52 = 64,和你预期的12加数字4的结果完全不符。

调整后的代码为:

WriteLine(i  + myChar - '0');

之所以能得到正确结果16,逻辑非常直接:

  • 编码连续排列的规则下,数字字符和'0'的编码差值,刚好等于这个字符代表的真实整数数值
  • 具体到你的例子:'0'的ASCII编码值是48,'4'的编码值是52,'4' - '0' = 52 - 48 = 4,刚好对应字符'4'代表的整数4
  • 此时实际计算逻辑为12 + 4 = 16,和预期结果一致

需要注意的是,这个写法仅对'0'到'9'范围内的单个数字字符有效,如果参与运算的字符是字母、符号,或是需要处理多位数,该方法无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:03:17