您的位置:首页 > 编程语言 > C语言/C++

C++操作符的优先级

2015-10-18 11:31 155 查看
原文地址

优先级操作符描述例子结合性
1()

[]

->

.

::

++

--
调节优先级的括号操作符

数组下标访问操作符

通过指向对象的指针访问成员的操作符

通过对象本身访问成员的操作符

作用域操作符

后置自增操作符

后置自减操作符
(a + b) / 4;

array[4] = 2;

ptr->age = 34;

obj.age = 34;

Class::age = 2;

for( i = 0; i < 10; i++ ) ...

for( i = 10; i > 0; i-- ) ...
从左到右
2!

~

++

--

-

+

*

&

(type)

sizeof
逻辑取反操作符

按位取反(按位取补)

前置自增操作符

前置自减操作符

一元取负操作符

一元取正操作符

解引用操作符

取地址操作符

类型转换操作符

返回对象占用的字节数操作符
if( !done ) ...

flags = ~flags;

for( i = 0; i < 10; ++i ) ...

for( i = 10; i > 0; --i ) ...

int i = -1;

int i = +1;

data = *ptr;

address = &obj;

int i = (int) floatNum;

int size = sizeof(floatNum);
从右到左
3->*

.*
在指针上通过指向成员的指针访问成员的操作符

在对象上通过指向成员的指针访问成员的操作符
ptr->*var = 24;

obj.*var = 24;
从左到右
4*

/

%
乘法操作符

除法操作符

取余数操作符
int i = 2 * 4;

float f = 10 / 3;

int rem = 4 % 3;
从左到右
5+

-
加法操作符

减法操作符
int i = 2 + 3;

int i = 5 - 1;
从左到右
6<<

>>
按位左移操作符

按位右移操作符
int flags = 33 << 1;

int flags = 33 >> 1;
从左到右
7<

<=

>

>=
小于比较操作符

小于或等于比较操作符

大于比较操作符

大于或等于比较操作符
if( i < 42 ) ...

if( i <= 42 ) ...

if( i > 42 ) ...

if( i >= 42 ) ...
从左到右
8==

!=
等于比较操作符

不等于比较操作符
if( i == 42 ) ...

if( i != 42 ) ...
从左到右
9&按位与操作符flags = flags & 42;从左到右
10^按位异或操作符flags = flags ^ 42;从左到右
11|按位或操作符flags = flags | 42;从左到右
12&&逻辑与操作符if( conditionA && conditionB ) ...从左到右
13||逻辑或操作符if( conditionA || conditionB ) ...从左到右
14? :三元条件操作符int i = (a > b) ? a : b;从右到左
15=

+=

-=

*=

/=

%=

&=

^=

|=

<<=

>>=
赋值操作符

复合赋值操作符(加法)

复合赋值操作符(减法)

复合赋值操作符(乘法)

复合赋值操作符(除法)

复合赋值操作符(取余)

复合赋值操作符(按位与)

复合赋值操作符(按位异或)

复合赋值操作符(按位或)

复合赋值操作符(按位左移)

复合赋值操作符(按位右移)
int a = b;

a += 3;

b -= 4;

a *= 5;

a /= 2;

a %= 3;

flags &= new_flags;

flags ^= new_flags;

flags |= new_flags;

flags <<= 2;

flags >>= 2;
从右到左
16,逗号操作符for( i = 0, j = 0; i < 10; i++, j++ ) ...从左到右
记忆方法:

--摘自《C语言程序设计实用问答》

问题:如何记住运算符的15种优先级和结合性?

解答:C语言中运算符种类比较繁多,优先级有15种,结合性有两种。

如何记忆两种结合性和15种优先级?下面讲述一种记忆方法。

结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。

优先级有15种。记忆方法如下:

记住一个最高的:构造类型的元素或成员以及小括号。

记住一个最低的:逗号运算符。

剩余的是一、二、三、赋值。

意思是单目、双目、三目和赋值运算符。

在诸多运算符中,又分为:

算术、关系、逻辑。

两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:

算术运算符分 *,/,%高于+,-。

关系运算符中,〉,〉=,<,<=高于==,!=。

逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑或(||)。

逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或(|)。

这样就将15种优先级都记住了,再将记忆方法总结如下:

去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: