C字符值算术

hak*_*ata 2 c ascii expression char atoi

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

Ant*_*t's 8

可能重复:见这里

很好地'0'代表48字符集.所以减去('0'像这样的任何其他字符值)'1','2'将给予相应的数量,所以'9'- '0'给你9.

请注意我们的差异是两个字符: '9'- '0',这两个都是char


oua*_*uah 7

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

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

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


Jar*_*Par 7

在引擎盖下,a char由数值表示.数字0-9的字符以升序数值存储.如果我们使用0基本值,那么简单的减法可以将0-9 char转换为等效的int值