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