2009.05.08
昨天总结的移位运算的问题,昨天的那样解释也不全对!因为High,Low定义为 char,short型,temp的结果都不一样。总的情况是:
- High,Low定义为unsigned char 与 short型,temp的结果是一样的,为0xD5CA;
- High.Low如果是char型的,temp = 0xFFCA;
一直都没有办法得到解释说,为什么会出现这两种不同的结果! 唯一能说明这个问题的应该是:C语言里面,移位运算的话,移的位数不能超过该变量的总位数。否则结果是“undefine”。 比如int型不能移动超过32位,char型的不能移位超过8位。
早上在CSDN上发帖,终于知道为什么了。原来我之前理解出错了,一直以为是High移位的问题!原来不是!
如果 High,Low定义为 char,
temp的值是多少?
0xFFCA
//temp = High << 8 | Low = 0xD500 | 0xFFCA = 0xFFCA
如果 High,Low定义为 unsigned char, 那temp值又是多少?
0xD5CA
//temp = High << 8 | Low = 0xD500 | 0x00CA = 0xD5CA
如果High,Low定义为short,temp值又是多少?
0xD5CA
//temp = High << 8 | Low = 0xD500 | 0x00CA = 0xD5CA
这才是正解!
To be continue.....
文章评论(0条评论)
登录后参与讨论