在C中将putchar的十进制文本转换为ASCII等效文本
我试图理解为什么下面的说法有效:在C中将putchar的十进制文本转换为ASCII等效文本,c,putchar,C,Putchar,我试图理解为什么下面的说法有效: putchar( 1 + '0' ); +'0'表达式似乎将文本转换为putchar喜欢给定的相应ASCII版本(在本例中为49) 我的问题是为什么它会这样做?感谢您的帮助。如果我做出了任何错误的假设,我也深表歉意。这与ASCII无关。甚至没有人提到ASCII 此代码假定在系统的字符编码中,所有数字都显示为从'0'到'9'的连续范围,因此如果向字符'0'添加偏移量,则会得到对应数字的字符 所有可能由C或C++编译器使用的字符编码必须具有此属性(例如C++中的2
putchar( 1 + '0' );
+'0'表达式似乎将文本转换为putchar喜欢给定的相应ASCII版本(在本例中为49)
我的问题是为什么它会这样做?感谢您的帮助。如果我做出了任何错误的假设,我也深表歉意。这与ASCII无关。甚至没有人提到ASCII 此代码假定在系统的字符编码中,所有数字都显示为从
'0'
到'9'
的连续范围,因此如果向字符'0'
添加偏移量,则会得到对应数字的字符
<>所有可能由C或C++编译器使用的字符编码必须具有此属性(例如C++中的2.3/3),因此此代码是可移植的。 < P>字符>代码> '0' < /C> > < <代码> '9' < /Cord>是连续的。C标准保证了这一点 ASCII格式:
=48'0'
=49'1'
=50'2'
'0'
仅被视为偏移量
,即'0'+0=48
李>'0'
,即'0'+1=49
'1'
等等。我想我没有停下来想一想。我不认为添加字符会处理偏移量。再次感谢您。@Hank:字符只是整数值,所以您可以像使用任何整数一样在算术上使用它们。(注意,像
fgetc
这样的东西甚至想要返回一个更通用的int
,尽管您只需要一个char
)相反,可以用来编写您自己的atoi
:数字c
的数值是c-'0'
。。。