为什么将'0'添加到整数数字可以转换为字符?

Why does adding a '0' to an int digit allow conversion to a char?

本文关键字:转换 字符 添加 为什么 整数 数字      更新时间:2023-10-16

我在很多地方都看到过这样的例子:

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

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

如果您查看ASCII表asciitable,您将看到数字从48(表示'0')开始,一直到57(表示'9')。因此,为了获得数字的字符代码,您可以将该数字添加到'0'的字符代码中。

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

'0' + 1 = 49 = '1'
'0' + 2 = 50 = '2'
...
'0' + 9 = 57 = '9'

所以,如果你想把一个数字转换成它对应的字符,只需要加上'0'

即使平台使用非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

当使用ASCII编码时,它变成:

'1' - '0' = 49 - 48 = 1
'2' - '0' = 50 - 48 = 2
'3' - '0' = 51 - 48 = 3
'4' - '0' = 52 - 48 = 4
'5' - '0' = 53 - 48 = 5
'6' - '0' = 54 - 48 = 6
'7' - '0' = 55 - 48 = 7
'8' - '0' = 56 - 48 = 8
'9' - '0' = 57 - 48 = 9
因此,无论平台使用何种字符编码,
int i = 2;
char c = i + '0';

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

c++标准在其[lex]中规定:(引用自N4659草案)

因此,'1'的值为' 0'+1 ', '2'的值比它大1,即'0'+2,以此类推。如果n的值为0 ~ 9,则'0'+n'0' ~ '9'对应字符的值。

(与前面的答案不同,这个答案不假设ASCII,并显示属性如何从c++标准派生。)

基于ASCII值。加上ASCII值0(即48)意味着48 + 5将等于53或ASCII 53(即5)。

谷歌ASCII,找到一个好的图表,并研究它。当您查看每个字符(字符)的值时,应该可以理解。

(char)(i+c),其中cchar,给您一个新的char,其ascii值等于(c的ascii值)+ i。由于数字0-9的ascii值是连续的,只要i在适当的范围内,i+'0'就会给出与i对应的字符。

EDIT: (i+c)是int型,正如Jarod42指出的那样。增加了强制转换以保持正确性。

char将根据ASCII值将整数转换为相应的值,因此如果您将值48赋给char,它将存储0,因为48是ASCII值0。相应地,将ASCII值0添加到需要转换为char

的任何整数上