股票

运算符的优先级问题

因为运算符 & 和 + ,今天把我折腾够呛。

1
2
3
4
case3 : /* XX 04 53 FF */
         trans_crc = ((*ul_check_buffer)&0xff00) + ((*ul_check_buffer>>16)&0xff);
         trans_crc = ((((*ul_check_buffer)>>8)&0xff)<<8) + ((*ul_check_buffer>>16)&0xff);
break;

就这两句代码。我本来的意思是,从中间提取出来 04 53,组成16位数据 0x5304, 结果怎么算得到的都是 0x0053,恰巧传输的时候,XX也是0,以至于我都当自己不会计算左移右移了。

因为我开始是这样子写的:

  1. case3 : /* XX 04 53 FF */
  2.          trans_crc = (*ul_check_buffer)&0xff00 + (*ul_check_buffer>>16)&0xff;
  3.          trans_crc = ((((*ul_check_buffer)>>8)&0xff)<<8) + ((*ul_check_buffer>>16)&0xff);
  4. break;

在 “+”两边我还特意空了两格,意思是两边相加,我压根没想到,按位与(&)的优先级竟然比加号(+)低!!!以后还是老老实实的加括号吧,不能想当然了。

打赏
原文链接:,转发请注明来源!

发表评论