C语言中运算符优先级运用注意事项

今天在调试中C语言程序中,出现一个问题,给一个结构体元素赋值,不能出现想要的数据,

RFID_date.term_of_validity[0] = (uint16)(databuf[0]|databuf[1]<<8-2000),本来算出来的应该是20,

算出来的值为228,单独拿出databuf[0]|databuf[1]<<8,2000,又正常,查看C语言中运算符优先级,

发现原来是 - 的优先级大与<<优先级和|,所以databuf[1]<<8完后,先减去2000,再与databuf[0]相或,

由此算出异常值,基础不扎实太容易出错,

 

有一个办法,碰到这种不确定优先级的,先用括号括起来,把确定要计算的先计算出来,就不会出现这个问题。

 

posted @ 2020-06-28 21:59  渝清  阅读(143)  评论(0)    收藏  举报