char x = '0';
char y = '6';
char z = (char)(x + y);
char h = (char)((char)(0) + y);
z输出为'f';h输出为'6'
请问这个是怎么计算的呢?两个看似一样,却输出不一样呢?请各位讲解下,谢谢了
先看这段代码的部分IL指令
从指令中可以看出 '0' 与'6'都被转成了ASCII码 然后把值相加等102 再转成char类型 102 对应的图形码为'f'所以第一个结果为"f"
再看第二个 int类型转char 类型时不会转成ASCII原值是多少就是多少 再加上y的ASCII码值 54 得到的结果还是54 ,然后再进行一次char的格式转换会把ASCII 54 转成图形码 对应的也就是 6
所以得到的结果就是 f 与 6
大致就是这样
谢谢你的回答,我明白了
x='0'对应ASSIC为整数48,y='6'对应为54. x+y 相当于做了加法运算=102,(char)强制转换后对应的ASSIC小写f
注意char h = (char)((char)(0) + y);这里的0与char x = '0';不一样。前者就是0这个整数值(没有单引号),后者是'0'这个字符值。
前者转换为整数还是0,后者转换为整数就是48了。
(char)((char)(0) + y);相当于char(0+54),对应ASSIC表为字符'6'
ASSIC表:http://www.cnblogs.com/Bonker/archive/2013/02/01/2888776.html
x='0'对应ASSIC为整数48,y='6'对应为54. x+y 相当于做了加法运算=102。(char)强制转换后对应的ASSIC小写f