!P1==0?是先算哪个?
!P1==0?是先算哪个?,!和==哪个优先级高
c语言的操作符共有15个优先级,如下:
Operators Associativity
------------------------------------------------------------------
运算符 结合性
------------------------------------------------------------------
() [] -> . left to right
! ~ ++ -- + - * sizeof(type) right to left
* / % left to right
+ - left to right
<< >> left to right
< <= > >= left to right
== != left to right
& left to right
^ left to right
| left to right
&& left to right
|| left to right
?: right to left
= += -= *= /= %= &= ^= |= <<= >>= right to left
, left to right
1 [ ] 数组下标 左 array_name[expr]
. 成员选择 左 object.member
( ) 方法参数 左 method_name(expr_list)
( ) 实例构造 左 class_name(expr_list)
++ 后缀自增 左 lvalue++
-- 后缀自减 左 lvalue--
2 ++ 前缀自增 右 ++rvalue
-- 前缀自减 右 --lvalue
~ 按位取反 右 ~expr
! 逻辑非 右 !expr
+ 一元加 右 +expr
- 一元减 右 -expr
3 ( ) 强制转换 右 (type)expr
new 对象实例化 右 newtype()
newtype(expr_list)
newtype[expr]
4 * 乘 左 expr *expr
/ 除 左 expr /expr
% 求余 左 expr %expr
5 + 加 左 expr +expr
- 减 左 expr -expr
+ 字符串连接 左 strExpr +strExpr
6 >> 有符号右移 左 expr >>distance
>>> 无符号右移 左 expr >>>distance
7 < 小于 左 expr <expr
<= 小于等于 左 expr <=expr
> 大于 左 expr >expr
>= 大于等于 左 expr >=expr
instanceof 类型比较 左 ref instanceofrefType
== 等于 左 expr ==expr
!= 不等于 左 expr !=expr
8 & 整数按位与 左 integralExpr &integralExpr
& 布尔与 左 booleanExpr &booleanExpr
9 ^ 整数按位异或 左 integralExpr ^integralExpr
^ 布尔异或 左 booleanExpr ^booleanExpr
10 | 整数按位或 左 integralExpr |integralExpr
| 布尔或 左 booleanExpr |booleanExpr
11 && 逻辑与 左 booleanExpr &&booleanExpr
12 || 逻辑或 左 booleanExpr ||booleanExpr
13 ?: 条件运算 右 booleanExpr ?expr : expr
14 = 赋值 右 lvalue =expr
*= 乘赋值 右 lvalue *=expr
/= 除赋值 右 lvalue /=expr
%= 模赋值 右 lvalue %=expr
+= 加赋值 右 lvalue +=expr
+= 字符串连接赋值 右 lvalue +=expr
-= 减赋值 右 lvalue -=expr
<<= 左移赋值 右 lvalue <<=expr
>>= 有符号右移赋值 右 lvalue >>=expr
>>>= 无符号右移赋值 右 lvalue >>>=expr
&= 整数按位与赋值 右 lvalue &=expr
&= 布尔与赋值 右 lvalue &=expr
|= 整数按位或赋值 右 lvalue |=expr
|= 布尔或赋值 右 lvalue |=expr
^= 整数按位异或赋值 右 lvalue ^=expr
^= 布尔异或赋值 右 lvalue ^=expr
15 , 逗号 右 lvalue ,expr