标签存档: 优先级

C语言中三目运算符与其他运算符混用时容易忽略优先级的问题

c = a + (CONST > b)?(CONST):(b);

观察上面的表达式,我们会简单的认为先计算(CONST > b)?(CONST):(b),然后其结果与a相加,赋值给从。但实际的执行顺序是先执行 a + (CONST > b),其结果再参与到三目运算符的运算,所以如果a + (CONST > b)的结果不为零,则c始终等于CONST。

正确的写法是把三目运算符表达式再用一个括号括起来。

优先级啊优先级

if (BIT2 == (P1IN & BIT2)) 与 if (BIT2 == P1IN & BIT2)

真是坑爹啊,
==、!= 运算符优先级是7,
& 优先级是8
^ 优先级是9
|  优先级是10

哎,还是唯一解决办法,终极解决办法,统统加括号!!!

你认为 i<<4+1 等于多少呢

运算符的优先级是个很要命的问题,如题,你认为结果是多少呢。我想当然的认为是先移位后加一,但是实际的优先级是加法高于移位。加减法位与第4优先级,左移和右移位与第5优先级。要记住这每一个运算符的优先级也不是一件容易的 事,最简单的办法还是不论是什么样的计算,统统用括号来规定优先级。