2

我一直在阅读“The C Programming Language”这本书学习 C,我偶然发现了s[i] - '0' 他们所说的算术,它给出了存储在 s[i] 中的字符的数值。我不是很明白,它怎么能通过减法给出值呢?注意 这在 atoi 函数中使用,该函数将一串数字转换为其等效的数字。谢谢

4

4 回答 4

8

可能重复:见这里

在字符集中很好地'0'表示48'0'所以用任何其他字符值减去它( ) '1''2'将给出相应的数字,所以'9'-'0'会给你9

注意我们是两个字符的区别: '9'- '0',这里都是char

于 2012-04-10T17:32:17.753 回答
7

'0'to的字符值'9'保证是 C 中所有字符集中的顺序值。

(C99,5.1.2p3)“在源和执行基本字符集中,上述十进制数字列表中 0 之后的每个字符的值都应比前一个值大一。”

这意味着例如'1' == '0' + 1

于 2012-04-10T17:30:42.063 回答
7

在引擎盖下,achar由一个数值表示。数字 0-9 的字符存储在升序数值中。如果我们0用作基值,那么简单的减法可以将 0-9 字符转换为等效的 int 值

于 2012-04-10T17:30:45.027 回答
4

基本上,您需要了解的是,在现代计算机上,所有信息都以数字方式存储为字节序列。由每个程序决定如何解释每个字节。所以一个字符只不过是一个或多个字节——一个通常代表人类可读的字母或符号的数值。例如,在 ASCII 中,字母“A”由数值 65 表示。

这意味着在某些编程语言(例如 C)中,您可以将字符视为数值。例如,在 C 语言中,表达式'A' + 1会给您 66,这恰好是 ASCII 值B(假设您的编译器/平台使用的是与 ASCII 兼容的字符集)。

于 2012-04-10T17:31:55.093 回答