求教下面是怎么算的:char c1=3,c2=7; char c3=~c1^c2<<2; printf("%d",c3); 解是-32
答案:2 悬赏:40 手机版
解决时间 2021-02-24 21:16
- 提问者网友:我是女神我骄傲
- 2021-02-24 10:34
求教下面是怎么算的:char c1=3,c2=7; char c3=~c1^c2<<2; printf("%d",c3); 解是-32
最佳答案
- 五星知识达人网友:底特律间谍
- 2021-02-24 11:06
2
按照优先级,可以写成
c3 = (~c1)^(c2<<2)
= (~00000011) ^ (00000111<<2)
= 11111100 ^ 00011100
= 11100000
而11100000是16进制的0xe0,如果用%x的形式打印出来,因为要把11100000当作8bit的有符号数来看待,那么就需要把11100000当作有符号数的补码来看,计算一下它作为补码的时候所表示的负数如下,就是要把11100000当作8bit的无符号数来看待结果就是e0。
如果用%d的形式打印出来:
正数补码表示的有符号数 = 补码本身
负数补码表示的有符号数 = 负的(补码除符号位外的其他比特位取反 + 1)
所以c3=~c1^c2<<
按照优先级,可以写成
c3 = (~c1)^(c2<<2)
= (~00000011) ^ (00000111<<2)
= 11111100 ^ 00011100
= 11100000
而11100000是16进制的0xe0,如果用%x的形式打印出来,因为要把11100000当作8bit的有符号数来看待,那么就需要把11100000当作有符号数的补码来看,计算一下它作为补码的时候所表示的负数如下,就是要把11100000当作8bit的无符号数来看待结果就是e0。
如果用%d的形式打印出来:
正数补码表示的有符号数 = 补码本身
负数补码表示的有符号数 = 负的(补码除符号位外的其他比特位取反 + 1)
所以c3=~c1^c2<<
全部回答
- 1楼网友:老鼠爱大米
- 2021-02-24 11:20
你说呢...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯