Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72305
  • 博文数量: 14
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 165
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 23:59
文章分类

全部博文(14)

文章存档

2009年(14)

我的朋友

分类: C/C++

2009-05-15 10:07:36

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

阅读(527) | 评论(0) | 转发(0) |
0

上一篇:ModBus开发笔记 2

下一篇:ModBus开发笔记 4

给主人留下些什么吧!~~