LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1765|回复: 3

c 语言移位运算符 的使用问题

[复制链接]
发表于 2006-6-29 17:12:33 | 显示全部楼层 |阅读模式
例子如下: unsigned char c = 252;
              unsinged char c2 = (c << 2) >> 2;
这样得到的c2的结果应该是60啊,可是程序运行后确不是而且还是252

这是甚么问题!
发表于 2006-6-29 17:20:36 | 显示全部楼层
c<<2已经把高2位弄丢了
回复 支持 反对

使用道具 举报

发表于 2006-6-29 19:27:02 | 显示全部楼层
unsigned char c2 = (c<<2) >> 2;
上面这条语句并不等价于
  1. unsigned char c2=c<<2;
  2. c2=c2>>2;
复制代码

unsigned char c2 = (c<<2) >> 2  中, (c<<2)借助了临时变量,相当于用了一个unsigned int 来存放临时结果。于是这句相当于:
  1. unsigned int temp=c<<2;
  2. c2=temp >> 2;
复制代码
所以最后char c 和char c2的值相同。
回复 支持 反对

使用道具 举报

发表于 2006-7-19 20:45:11 | 显示全部楼层
觉得这是编译器的问题!禁止编译器优化看看结果
也有可能写编译器的人觉得没有人会这么笨地左右移吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表