困惑的代码:意思相同的代码,结果不同?不知道踩到哪个地雷了?

norains 2011-05-18 09:19:59
首先是变量的声明:

unsigned char val = 0xFD;
unsigned char temp = 0;

然后是运算的部分:
temp = (val & 0xAA) >> 1 + (val & 0x55) << 1;

将该代码放到IDE中编译测试,在Dev-cpp和VC里面,temp的结果都是0.

如果将上面的运算部分拆除,分为两步走:
temp = (val & 0xAA) >> 1;
temp +=(val & 0x55) << 1;

结果就是0xFE,为正确答案。


究竟我第一部分踩到了什么地雷,导致结果不正常?
...全文
193 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
秃头披风侠 2011-05-18
  • 打赏
  • 举报
回复
唯一能想到的就是优先级问题了...
yfk 2011-05-18
  • 打赏
  • 举报
回复
除非你对运算符优先级很清楚,否则推荐程序应该尽量多使用()


norains 2011-05-18
  • 打赏
  • 举报
回复
噢,优先级啊。。。。原来地雷在这里
pmars 2011-05-18
  • 打赏
  • 举报
回复
优先级的问题
temp = (val & 0xAA) >> 1 + (val & 0x55) << 1;
等同于
temp = (val & 0xAA) >> ( 1 + (val & 0x55) ) << 1;
ryfdizuo 2011-05-18
  • 打赏
  • 举报
回复
优先级问题吧。
temp = ( (val & 0xAA) >> 1 ) + ( (val & 0x55) << 1 );

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧