首页 新闻 会员 周边

关于char字符的问题

0
悬赏园豆:5 [已解决问题] 解决于 2013-11-28 17:39

char x = '0';
char y = '6';
char z = (char)(x + y);
char h = (char)((char)(0) + y);

z输出为'f';h输出为'6'

请问这个是怎么计算的呢?两个看似一样,却输出不一样呢?请各位讲解下,谢谢了

xiaoqiangzhou的主页 xiaoqiangzhou | 初学一级 | 园豆:83
提问于:2013-11-28 11:40
< >
分享
最佳答案
0

先看这段代码的部分IL指令 

从指令中可以看出 '0' 与'6'都被转成了ASCII码 然后把值相加等102  再转成char类型  102 对应的图形码为'f'所以第一个结果为"f"

再看第二个 int类型转char 类型时不会转成ASCII原值是多少就是多少 再加上y的ASCII码值 54 得到的结果还是54 ,然后再进行一次char的格式转换会把ASCII 54 转成图形码 对应的也就是 6 

所以得到的结果就是 f 与 6  

大致就是这样

收获园豆:3
Zery | 大侠五级 |园豆:6151 | 2013-11-28 12:14

谢谢你的回答,我明白了

xiaoqiangzhou | 园豆:83 (初学一级) | 2013-11-28 17:39
其他回答(2)
0

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

收获园豆:2
大芝麻 | 园豆:4 (初学一级) | 2013-11-28 12:11
0

x='0'对应ASSIC为整数48,y='6'对应为54.  x+y 相当于做了加法运算=102。(char)强制转换后对应的ASSIC小写f

jianrong.zheng | 园豆:550 (小虾三级) | 2013-11-28 13:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册