我知道要将任何给定的 char 转换为 int,此代码是可能的 [除了 atoi()]:
int i = '2' - '0';
但我从来不明白它是如何工作的,'0' 的意义是什么,我似乎没有在网上找到任何解释。
提前致谢!!
我知道要将任何给定的 char 转换为 int,此代码是可能的 [除了 atoi()]:
int i = '2' - '0';
但我从来不明白它是如何工作的,'0' 的意义是什么,我似乎没有在网上找到任何解释。
提前致谢!!
C 中的所有字符都用一个整数值表示,即字符的 ASCII 码。例如'0'对应于48,'2'对应于50,所以'2'-'0'得到你50-48 = 2
链接到 ASCII 表:http ://www.robelle.com/smugbook/ascii.html
当您使用逗号时,' '您将数字视为 char,如果将其赋予 int,则 int 将采用该字符的 ASCII 码的值。
任何用单引号括起来的字符文字都对应一个代表该字符的 ASCII 代码的数字。事实上,此类文字的计算结果不是char,而是int,因此它们可以与其他数字文字完全互换。
在您的表达式中,'2'可以与 互换50,并且'0'可以与 互换48。
看看 ASCII 表。
'0'表示为 0x30,'9'表示为 0x32。
这导致
0x32 - 0x30 = 2
这都是关于相应字符的ASCII码的。
在 C 语言中,所有数字(0 到 9)都以 ASCII 值 48 到 57 顺序编码。所以'0'实际上得到的值是 48,'2'值是 50。所以当你写 时int i = '2' - '0';,你实际上是从 50 中减去 48,得到 2。
'0'to'9'保证在所有字符集中都是 C 中的顺序值。这不限于 ASCII 和 C 不限于 ASCII 字符集。
所以这里的顺序意味着'2'值是'0' + 2。
关于int并char注意'0'and '9'values 是intC 中的 type 而不是 type char。字符文字的类型为int。
这两个术语在内部由数字的 ASCII 代码表示,并且由于数字具有连续的 ASCII 代码,减去它们可以得到两个数字之间的差异。
您也可以对字符执行类似的技巧,例如通过从小写字符中减去 32 将小写转换为大写
'a' - 32 = 'A'
这只是因为 ASCII 按顺序为字符分配代码,即“2”的字符代码比“0”的字符代码大 2。
在另一种编码中它不起作用。
当您将 char 转换为 int 时,它实际上将每个字符映射到 ascii 表中的适当数字。
这意味着'2' - '0'翻译为50 - 48. 所以你也可以用同样的方法找出两个字母的数字距离,例如
'z' - 'a'equals 122 - 97equals25
您可以在 thsi 表中查找每个 ASCII 字符的数字表示: http ://www.asciitable.com/
实际上 achar只是一个无符号字节:C 只是针对不同的操作以不同的方式对待它。例如printf(97)产量97作为输出,但printf((char)97)会给你'a'作为输出。