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

