中易网

char c1='a',c2='B',c3='c'; int i1 =10,i2=20,i3=30; int x=c1=i2*i3;为什么输出结果是88

答案:2  悬赏:80  
解决时间 2021-01-12 15:39
  • 提问者网友:树红树绿
  • 2021-01-12 02:44
char c1='a',c2='B',c3='c'; int i1 =10,i2=20,i3=30; int x=c1=i2*i3;为什么输出结果是88?
最佳答案
  • 二级知识专家网友:从此江山别
  • 2021-01-12 04:00
语句
int x = c1 = i2*i3;中存在两个隐式强制转换
第一个强制转换为:表达式 i2*i3的值为600,类型为int。当这个值赋值给char类型变量c1时,发生强制转换。强制转换的结果为600的最低字节的值(0x58,即88)赋值给c1。这个强制转换导致600被截断,只取了(保留了)最低字节的值。
第二个强制转换为:表达式 x = c1,即将char类型值转换为int,但值没有变,依然是88
与程序中等效的语句如下:
int i2 = 20, i3 = 30;
char c1 = 'a';
int x;
c1 =(char)(i2*i3); //第一次强制转换
x = (int)c1;       //第二次强制转换
全部回答
  • 1楼网友:woshuo
  • 2021-01-12 04:23
x=c1=i2*i3-->x=c1=20*30-->x=c1=600-->x=600&255(因为c1是char型,将600赋给它时要从低位截断)-->x=88。追问初学者,能不能麻烦解释一下x=600&255怎么来的追答600已经得用2个字节表达了,而c1只有1个字节,所以要把两个字节表达的600的低字节取出来赋给c1,用600%256也行,道理一样——要说明的是这个计算是为了认你看,计算机中在把两字节的值赋给一个1字节变量(如这里的c1)时直接就把高字节丢弃了……或者这么看更直观:600的二进制是00000010 01011000,直接就把01011000赋给c1了,而01011000就是十进制88。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息