中易网

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
char c1='a',c2='B',c3='c'; int i1 =10,i2=20,i3=30; int x=c1=i2*i3;为什么输出结果是88?
最佳答案
语句
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;       //第二次强制转换
全部回答
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。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
cba冠军奖杯直接给俱乐部吗
民航中的knee board什么意思
康视力眼镜视力康复中心地址好找么,我有些事
我真的想知道李晨是怎么骗到这两亿去拍电影的
公制螺纹的小径怎么计算,如M22X1.5
yzr160l一6起重及冶金11kw电机接线彩图
华康堂地址在什么地方,想过去办事
南京至句容有高铁吗?晚上末班车几点
闪银里面的闪贷怎么没有了?
find与found的意思,用法上有什么区别英
括号里2倍的根号3+3倍的根号2括起来括号里2倍
上海南翔哪里有公证处呀
2015年衡阳社会保险公司和个人出资比例各是多
请问1mm和1cm是什么意思呢
求一个qq发语音的小匡匡的图片,整人用。
推荐资讯
男朋友为什么叫我给他种过草莓?。。
今天立春,求一些祝福你段子
曲屏电视和高清电视的区别
清代九代表什么
**.xlsx.ldenc是什么文件
新版西游戏中百花羞育奎木狼那段是原著上有的
我养的意蜂失王了、附近还有其它养这种蜂的、
N70和N72有什么区别啊?
某民航飞机在某月18日自东向西越过日界线后,
乐洁干洗(谷阳路)地址有知道的么?有点事想过
八字走土金水大运为妙。。 忌木火 是什么意思
门徒教的详细信息
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?