我试图理解为什么以下语句有效:
putchar( 1 + '0' );
似乎 + '0' 表达式将文字转换为 putchar 喜欢给出的相应 ASCII 版本(在这种特殊情况下为 49)。
我的问题是它为什么这样做?任何帮助表示赞赏。如果我做出任何不正确的假设,我也深表歉意。
这与 ASCII 无关。甚至没有人提到ASCII。
'0'
这段代码的假设是,在系统的字符编码中,所有数字都显示为从到的连续范围'9'
,因此如果向字符添加偏移量'0'
,则会得到对应数字的字符。
C 或 C++ 编译器可能使用的所有字符编码都必须具有此属性(例如 C++ 中的 2.3/3),因此此代码是可移植的。
字符'0'
是'9'
连续的。C 标准保证了这一点。
在 ASCII 中:
'0'
= 48'1'
= 49'2'
= 50等等
被'0'
简单地视为一个偏移量。
'0' + 0 = 48
,即'0'
。'0' + 1 = 49
,即'1'
。等等