C字符值算术

时间:2012-04-10 17:27:52

标签: c char ascii expression atoi

我一直在阅读“C程序设计语言”一书中学习C,我偶然发现了算术s[i] - '0',他们说它给出了存储在s [i]中的字符的数值。我不太明白它,怎么能通过减法给出价值? 注意这在atoi函数中使用,该函数将一串数字转换为其数字等效项。 感谢

4 个答案:

答案 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兼容的字符集)。