C语言中 有关移位时的问题

CPU是32位的芯片现在unsignedcharA,A=0x06;;(8<<A)&0xFFFF是否有位的丢失;为什么?因为我考虑A是UC的是8位左移8位后,会变成0x06... CPU是32位的芯片 现在 unsigned char A,A=0x06; ;(8<<A)&0xFFFF 是否有位的丢失; 为什么? 因为我考虑 A是UC 的 是8位 左移8位后,会变成0x0600;这样实际上高位 06不是丢了吗 ?(8<<A)&0xFFFF的值不就只是0 吗 ?请问我的考虑是否有道理 求高手解 展开
 我来答
阿冬76
2014-10-09 · TA获得超过5029个赞
知道大有可为答主
回答量:2710
采纳率:88%
帮助的人:1244万
展开全部
32位的芯片,位移操作的处理是这样的:
左移时移出的高位全部丢弃,低位全补0,所谓移出的高位是指超过32位,即4个字节后会丢弃;
右移时,移出的位数全部丢弃,对于无符号数,则高位补0;对于有符号数,则符号位补0还是1,不确定。

另外说一点,你的代码中8<<A这个表达式,意思是把8左移6位,而不是6左移8位。
tidecao2006
2014-10-09 · TA获得超过1229个赞
知道小有建树答主
回答量:842
采纳率:0%
帮助的人:846万
展开全部
如果你把表达式再转成unsigned char型,那么06就丢了,否则单纯这个表达式的结果为0x00006000,从机器角度来讲,移位只针对32位,也就是说先会把A扩展成32位再做移位操作。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式