
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 吗 ?请问我的考虑是否有道理 求高手解
展开
展开全部
32位的芯片,位移操作的处理是这样的:
左移时移出的高位全部丢弃,低位全补0,所谓移出的高位是指超过32位,即4个字节后会丢弃;
右移时,移出的位数全部丢弃,对于无符号数,则高位补0;对于有符号数,则符号位补0还是1,不确定。
另外说一点,你的代码中8<<A这个表达式,意思是把8左移6位,而不是6左移8位。
左移时移出的高位全部丢弃,低位全补0,所谓移出的高位是指超过32位,即4个字节后会丢弃;
右移时,移出的位数全部丢弃,对于无符号数,则高位补0;对于有符号数,则符号位补0还是1,不确定。
另外说一点,你的代码中8<<A这个表达式,意思是把8左移6位,而不是6左移8位。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询