sga*_*a62 9 c++ int type-conversion char
我已经看到了这个地方的例子:
int i = 2;
char c = i + '0';
string s;
s += char(i + '0');
Run Code Online (Sandbox Code Playgroud)
但是,我还没有看到为什么添加零允许转换的原因.
当使用ASCII编码的整数值'0'是48。
'0' + 1 = 49 = '1'
'0' + 2 = 50 = '2'
...
'0' + 9 = 57 = '9'
Run Code Online (Sandbox Code Playgroud)
因此,如果要将数字转换为相应的字符,只需将'0'其添加。
即使洗车台使用非ASCII编码,则lanuage仍然保证了角色'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
Run Code Online (Sandbox Code Playgroud)
当使用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
Run Code Online (Sandbox Code Playgroud)
因此,无论平台使用哪种字符编码,
int i = 2;
char c = i + '0';
Run Code Online (Sandbox Code Playgroud)
总是会导致c等于字符的值'2'。
C++ 标准规定,在其 [lex.charset] 部分 \xe2\x80\x9c 中,上述十进制数字列表中 0 之后的每个字符的值应比前一个 \xe2\x80\x9d 的值大 1(引用)摘自 N4659 草案)。
\n\n因此, 的值'1'是 ' 0'+1, 的值'2'比 ' 多 1,即'0'+2,依此类推。如果n值为 0 到 9,则是从到 的'0'+n对应字符的值。'0''9'
(与之前的答案不同,此答案不假定 ASCII,并显示该属性如何从 C++ 标准派生。)
\n