为什么要添加' 0'到一个int数字允许转换为char?

时间:2014-06-26 04:03:21

标签: c++ char int type-conversion

我已经看到了这方面的例子:

int i = 2;
char c = i + '0';
string s;
s += char(i + '0');

但是,我还没有看到为什么添加零允许转换的原因。

6 个答案:

答案 0 :(得分:9)

如果查看ASCII表asciitable,您会看到数字从48开始(为'0')并且最多为57(对于'9')。因此,为了获得数字的字符代码,您可以将该数字添加到字符代码“0”。

答案 1 :(得分:3)

使用ASCII编码时,'0'的整数值为48

'0' + 1 = 49 = '1'
'0' + 2 = 50 = '2'

...

'0' + 9 = 57 = '9'

因此,如果您想将数字转换为相应的字符,只需添加'0'即可。

即使platfrom使用非ASCII编码,语言仍然保证必须对字符'0' - '9'进行编码,以便:

'1' - '0' = 1
'2' - '0' = 2
'3' - '0' = 3
'4' - '0' = 4
'5' - '0' = 5
'6' - '0' = 6
'7' - '0' = 7
'8' - '0' = 8
'9' - '0' = 9

因此,无论平台使用的字符编码如何,行

int i = 2;
char c = i + '0';

将始终导致c的值等于字符'2'

答案 2 :(得分:2)

C ++标准在其[lex.charset]部分中指出:“上述十进制数字列表中的每个0后面的字符的值应比前一个的值大一个”(引自N4659草案)。 / p>

因此,'1'的值为'0'+1,而'2'的值比'0'+2多一个,依此类推。如果n的值从0到9,则'0'+n是从'0''9'的对应字符的值。

(与以前的答案不同,该答案不采用ASCII,而是显示该属性如何从C ++标准派生。)

答案 3 :(得分:1)

它基于ASCII值。将ASCII值0添加为48意味着48 + 5将为53或ASCII 53为5。

谷歌ASCII并找到一个好的图表并研究它。一旦你查看每个char(字符)的值,它就应该有意义。

答案 4 :(得分:0)

<(char)(i+c)其中cchar,为您提供一个新的char,其ascii值等于(c的ascii值)+ {{1 }}。由于数字0-9的ascii值是连续的,i会为您提供与i+'0'对应的字符,只要i位于适当的范围内。

编辑:i是一个int,正如Jarod42指出的那样。添加了强制转换以保持正确性。

答案 5 :(得分:-1)

char将根据ASCII值将整数转换为相应的值,因此,如果为char分配一个值48,则它将存储0,因为48是ASCII值0.相应地,将ASCII值添加为0到您需要转换为char的任何整数