先看一道题:
unsigned char a = 0x00;
if( a & 0x01 != 0x01 )
{
cout << " a != 0x01";
}
else
cout << "a == 0x00";
结果是什么?思考一下。
如果有答案了,再看看下面的关于操作符优先级的介绍:
可以先笼统,再具体。
笼统:
记住一个最高的:构造类型的元素或成员及小括号。
记住一个最低的:逗号。
中间的一,二,三,赋值。
二目中:算术,位移,关系,位操作,逻辑。
具体:
一个最高的:
:: 全局作用域 类作用域 名字空间
. 成员选择
->成员选择
[ ]下标
()函数调用
()类型构造
一个最低的:
,逗号
中间的:
先看二目,算术,位移,关系,位操作,逻辑
* , / , % , + , -
<< , >>
< , <= , > , >= , == , !=
& , ^ , |
&& , ||
三目: ? :
赋值:=
复合赋值: *= , /= , %=, +=, -=, <<=, >>=, &=, ^=, |=
在看一目:可以两端抓。
前端:->往右方向记
++,--(后);typeid (类型ID,运行时ID);显示强制类型转换;sizeof (对象大小,类型大小);++,--(前)
后端:<-往左方向记
~ ; ! ; - ; + ; *解引用 ; &取地址 ; ()类型转换 ; new ; delete ; delete[]
总表:
:: 全局作用域 类作用域 名字空间
. 成员选择
->成员选择
[ ]下标
()函数调用
()类型构造
++,--(后);typeid (类型ID,运行时ID);显示强制类型转换;sizeof (对象大小,类型大小);++,--(前)
~ ; ! ; - ; + ; *解引用 ; &取地址 ; ()类型转换 ; new ; delete ; delete[]
->*, .*
* , / , % , + , -
<< , >>
< , <= , > , >= , == , !=
& , ^ , |
&& , ||
? :
=
*= , /= , %=, +=, -=, <<=, >>=, &=, ^=, |=
throw
,
红色标记的为特殊的,另外记忆。
明白了以上内容,刚开始的那道题应该也会做了,关键是 a & 0x01 != 0x01 ;在二目中,算术,位移,关系,位操作,逻辑; a & 0x01 != 0x01 等价为 a & ( 0x01 != 0x01);所以结果为:a == 0x00。