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