原创 ModBus开发笔记 3

2009-5-15 10:08 2429 6 5 分类: 工业电子


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.....

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条