永发信息网

C语言一个问题

答案:4  悬赏:20  手机版
解决时间 2021-02-22 12:54
  • 提问者网友:寂寞梧桐
  • 2021-02-22 09:53
int Start[1];
Start[0]=0x393a;
Start[0]=Start[0]&0xFF00+0x0130;
结果Start[0]=0x0030,为什么
最佳答案
  • 五星知识达人网友:傲气稳了全场
  • 2021-02-22 11:20
楼主使用了按位与运算,全都转换成二进制看:(为了方便计算,可以填充前导0,补齐位数)
注:按位与(&)优先级低于加法(+)
0x393a=11100100111010;0xff00=1111111100000000;0x0130=100110000;
0xFF00+0x0130=1111111100000000+100110000=10000000000110000;
0x393a&0xFF00+0x0130=11100100111010&10000000000110000=110000;
110000转十六进制就是30;十六进制标准写法:0x0030;
有不懂可以追问啊!;
……写完一行总要打个;,强迫症了都……;
全部回答
  • 1楼网友:北方的南先生
  • 2021-02-22 15:29
是因为&双目运算符的优先级低于+双目运算符,所以上述表达式等效于: Start[0]=Start[0]&(0xff00 + 0x0130);
  • 2楼网友:逃夭
  • 2021-02-22 14:18
因为算错了 Start[0]=0x393a=首先,你这个语句有点问题,char c1=a,应该是char c1='a'才对~如果要让char型的c1去等于int型的a,a必须赋值,而且值必须在0~127之间(根据ascii值),而c2只能存储一个字符,c2='\33'是编译不过的~ 接着再看: a=e,就是a=e=2078 b=c1,即是b=c1=97 m=c2,错误 f=c即是f=c=12 n=1这个没有什么悬念 d=e即是d=e=2078 最后的打印就是这样的结果~
  • 3楼网友:西风乍起
  • 2021-02-22 12:38
这是运算符优先级问题 +高于& 先算0xFF00+0x0130 = 0x0030 再位与,结果是0x0030
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯