在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格式:

  • '0'
    =48
  • '1'
    =49
  • '2'
    =50
等等

'0'
仅被视为偏移量

  • '0'+0=48
    ,即
    '0'
  • '0'+1=49
    ,即
    '1'

等等。

我想我没有停下来想一想。我不认为添加字符会处理偏移量。再次感谢您。@Hank:字符只是整数值,所以您可以像使用任何整数一样在算术上使用它们。(注意,像
fgetc
这样的东西甚至想要返回一个更通用的
int
,尽管您只需要一个
char
)相反,可以用来编写您自己的
atoi
:数字
c
的数值是
c-'0'
。。。