我知道,任何给定的字符转换为int,这个代码是可能的[自的atoi除了()]:Ç - 将char转换成int
int i = '2' - '0';
,但我永远无法理解它是如何工作的,有什么意义的'0',我似乎没有在网上找到任何解释。
在此先感谢!
我知道,任何给定的字符转换为int,这个代码是可能的[自的atoi除了()]:Ç - 将char转换成int
int i = '2' - '0';
,但我永远无法理解它是如何工作的,有什么意义的'0',我似乎没有在网上找到任何解释。
在此先感谢!
在C中,字符文字具有类型int
。 [Character Literals/IBM]
在您的例子中,'0'
数值是48的'2'
数值是50。当你做'2' - '0'
你50 - 48 = 2
。这适用于ASCII数字0到9
见ASCII table,以获得更好的画面。
编辑:感谢@ouah整改。
当您使用逗号' '
您将该数字视为一个字符,并且如果将此数字赋予给int,则int将使用此字符的ASCII代码的值。
在单引号的任何字符文字对应于一个数字,表示该字符的ASCII码。事实上,这样的文字评估不是char
,而是int
,所以它们与其他数字文字完全可以互换。
在您的表达中,'2'
与50
可互换,'0'
与48
可互换。
C中的所有字符都用整数值表示,即字符的ASCII码。 例如 '0' 对应于48和 '2' 对应于50,所以'2'-'0'
让你50-48 = 2
链接到一个ASCII表:http://www.robelle.com/smugbook/ascii.html
我认为你的意思是50-48 :) – rdurand 2012-07-11 12:51:53
是,编辑。谢谢 :) – 2012-07-11 12:52:44
看一看ASCII表。
'0'
被表示为的0x30,'9'
被表示为0x32。
这导致
0x32 - 0x30 = 2
这是所有关于相应字符的ASCII codes。
在C中,所有的数字(0到9)在由ASCII编码的值48至57,顺序。所以'0'
实得值48,和'2'
具有值50。所以,当你写int i = '2' - '0';
,你实际上是从50减去48,并获得2
'0'
到'9'
保证是所有用C顺序值字符集。这不限于ASCII和C不限于ASCII字符集。
因此,这里的顺序意味着'2'
的值为'0' + 2
。
关于int
和char
注意到'0'
和'9'
值是用C int
类型的,未char
类型。字符文字类型为int
。
这两个术语在内部都由数字的ASCII代码表示,而数字有连续的ASCII代码减去它们会给你两个数字之间的差别。
你可以做类似的花样,字符为好,例如,移位小写由小写字母减去32大写
'a' - 32 = 'A'
这只是工作,因为ASCII为了即码分配给字符“2”的字符代码是比'0'的字符代码大2。
在另一种编码中,它不起作用。
当您将一个char转换为int时,它实际上会将每个字符映射到ascii表中的相应数字。
这意味着'2' - '0'
被翻译为50 - 48
。 所以你也可以用同样的方法找出两个字母的数字距离,例如, 'z' - 'a'
等于122 - 97
等于25
你可以看一下每个ASCII字符的数字representaions在thsi表: http://www.asciitable.com/
其实一个char
只是一个无符号字节:C会把它为不同的不同的操作。例如printf(97)
产生97
作为输出,但printf((char)97)
会给你'a'
作为输出。
感谢所有回复,相当有用的东西:) – 2012-07-11 13:00:46