C++运算优先级

C++运算符优先级算然不用死记硬背,但是有时候如果将一些常用的记下来,还是很方便的,特别是你在笔试或手头有一大堆工作时,如果此时你知道这些运算的优先级,那么就不需要进行查阅了。下面我将预运算符优先级列举出来,然后列举一些自己的总结,方便记忆。

Pre

Operator

Description

Example

Associative

1

()

[]

->

.

::

++

--

Grouping operator

Array access

Member access from a pointer

Member access from an object

Scoping operator

Post-increment

Post-decrement

(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-- ) ...

Left to Right

2

!

~

++

--

-

+

*

&

(type)

sizeof

Logical negation

Bitwise complement

Pre-increment

Pre-decrement

Unary minus

Unary plus

Dereference

Address of

Cast to a given type

Return size in bytes

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);

Right to Left

3

.*

->*

Member pointer selector

Member pointer selector

ptr->*var = 24;

obj.*var = 24;

left to right

4

*

/

%

Multiplication

Division

Modulus

int i = 2 * 4;

float f = 10 / 3;

int rem = 4 % 3;

left to right

5

+

-

Addition

Subtraction

int i = 2 + 3;

int i = 5 - 1;

left to right

6

<< 

>> 

Bitwise shift left

Bitwise shift right

int flags = 33 << 1;

int flags = 33 >> 1;

left to right

7

<=

>=

Comparison less-than

Comparison less-than-or-equal-to

Comparison greater-than

Comparison geater-than-or-equal-to

if( i < 42 ) ...

if( i <= 42 ) ...

if( i > 42 ) ...

if( i >= 42 ) ...

left to right

8

==

!=

Comparison equal-to

Comparison not-equal-to

f( i == 42 ) ...

if( i != 42 ) ...

left to right

9

&

Bitwise AND

flags = flags & 42;

left to right

10

^

Bitwise exclusive OR    

flags = flags ^ 42;

left to right

11

|

Bitwise inclusive (normal) OR      

flags = flags | 42;

left to right

12

&&

Logical AND

if( conditionA && conditionB ) ...

left to right

13

||

Logical OR

if( conditionA || conditionB ) ...

left to right

14

?:

Ternary conditional (if-then-else)

int i = (a > b) ? a : b;

Right to Left

15

=

+=

-=

*=

/=

%=

&=

^=

!=

<<=

>>=

Assignment operator

Increment and assign

Decrement and assign

Multiply and assign

Divide and assign

Modulo and assign

Bitwise AND and assign

Bitwise exclusive OR and assign

Bitwise inclusive (normal) OR and assign

Bitwise shift left and assign

Bitwise shift right and assign

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;

Right to Left

16

,

Sequential uation operator

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

Left to Right

 

 

记忆小技巧:

1.只有?:,赋值和单目预算符(第二级)是右向左结合,其他都是左向右结合;

2.后缀++,后缀--先于前缀++和前缀--;

3.<<与>>比算术运算符低;

4.第一级和最后一级要记住,?:倒数第二,也要记住;

5.逻辑运算符优先级为 ! ~ &  ^ | &&

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值