我一直在阅读“C程序设计语言”一书中学习C,我偶然发现了算术s[i] - '0'
,他们说它给出了存储在s [i]中的字符的数值。我不太明白它,怎么能通过减法给出价值?
注意这在atoi函数中使用,该函数将一串数字转换为其数字等效项。
感谢
答案 0 :(得分:8)
可能重复:See here
好'0'
代表字符集中的48
。因此,使用此'0'
,'1'
之类的任何其他字符值减去它('2'
)将给出相应的数字,因此'9'
- '0'
将为您提供{9
1}}。
请注意我们的差异是两个字符:'9'
- '0'
,这里都是char
答案 1 :(得分:7)
'0'
到'9'
的字符值保证是C中所有字符集的连续值。
(C99,5.1.2p3)“在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个值。”
例如,'1' == '0' + 1
答案 2 :(得分:7)
在引擎盖下,char
由数值表示。数字0-9的字符以升序数值存储。如果我们使用0
作为基值,那么简单的减法可以将0-9 char转换为等效的int值
答案 3 :(得分:4)
基本上,您需要了解的是,在现代计算机上,所有信息都以数字形式存储为一系列字节。由每个程序决定如何解释每个字节。所以一个字符只不过是一个或多个字节 - 一个通常代表人类可读字母或符号的数字值。例如,在ASCII中,字母“A”由数值65表示。
这意味着在某些编程语言(例如C)中,您可以将字符视为数值。例如,在C中,表达式'A' + 1
将为您提供66,恰好是B
的ASCII值(假设您的编译器/平台使用的是与ASCII兼容的字符集)。