2012-07-11 102 views
0

我知道,任何给定的字符转换为int,这个代码是可能的[自的atoi除了()]:Ç - 将char转换成int

int i = '2' - '0'; 

,但我永远无法理解它是如何工作的,有什么意义的'0',我似乎没有在网上找到任何解释。

在此先感谢!

+0

感谢所有回复,相当有用的东西:) – 2012-07-11 13:00:46

回答

7

在C中,字符文字具有类型int。 [Character Literals/IBM]

在您的例子中,'0'数值是48的'2'数值是50。当你做'2' - '0'50 - 48 = 2。这适用于ASCII数字0到9

ASCII table,以获得更好的画面。

编辑:感谢@ouah整改。

+0

其实,它适用于所有数字,因为C保证它。 – unwind 2012-07-11 12:50:02

+0

所以,当我添加或减去任何字符类型,我操纵他们的ASCII码? – 2012-07-11 12:50:26

+0

@Alex,'2'的数值为50,而不是58. – Siddiqui 2012-07-11 12:52:47

1

当您使用逗号' '您将该数字视为一个字符,并且如果将此数字赋予给int,则int将使用此字符的ASCII代码的值。

1

在单引号的任何字符文字对应于一个数字,表示该字符的ASCII码。事实上,这样的文字评估不是char,而是int,所以它们与其他数字文字完全可以互换。

在您的表达中,'2'50可互换,'0'48可互换。

2

C中的所有字符都用整数值表示,即字符的ASCII码。 例如 '0' 对应于48和 '2' 对应于50,所以'2'-'0'让你50-48 = 2

链接到一个ASCII表:http://www.robelle.com/smugbook/ascii.html

+0

我认为你的意思是50-48 :) – rdurand 2012-07-11 12:51:53

+0

是,编辑。谢谢 :) – 2012-07-11 12:52:44

1

看一看ASCII表。

'0'被表示为的0x30,'9'被表示为0x32。

这导致

0x32 - 0x30 = 2 
1

这是所有关于相应字符的ASCII codes

在C中,所有的数字(0到9)在由ASCII编码的值48至57,顺序。所以'0'实得值48,和'2'具有值50。所以,当你写int i = '2' - '0';,你实际上是从50减去48,并获得2

1

'0''9'保证是所有用C顺序值字符集。这不限于ASCII和C不限于ASCII字符集。

因此,这里的顺序意味着'2'的值为'0' + 2

关于intchar注意到'0''9'值是用C int类型的,未char类型。字符文字类型为int

1

这两个术语在内部都由数字的ASCII代码表示,而数字有连续的ASCII代码减去它们会给你两个数字之间的差别。

你可以做类似的花样,字符为好,例如,移位小写由小写字母减去32大写

'a' - 32 = 'A' 
1

这只是工作,因为ASCII为了即码分配给字符“2”的字符代码是比'0'的字符代码大2。

在另一种编码中,它不起作用。

1

当您将一个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'作为输出。