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

C、C++运算符优先级列表

2011-09-17 10:54 190 查看

C、C++运算符优先级列表

1.C语言运算符优先级

运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。

运算符
解释
结合方式
() [] -> .括号(函数等),数组,两种结构成员访问由左向右
! ~ ++ -- + -
* & (类型) sizeof

否定,按位否定,增量,减量,正负号,
间接,取地址,类型转换,求大小

由右向左
* / %乘,除,取模由左向右
+ -加,减由左向右
<< >>左移,右移由左向右
< <= >= >小于,小于等于,大于等于,大于由左向右
== !=等于,不等于由左向右
&按位与由左向右
^按位异或由左向右
|按位或由左向右
&&逻辑与由左向右
||逻辑或由左向右
? :条件由右向左
= += -= *= /=
&= ^= |= <<= >>=

各种赋值由右向左
,逗号(顺序)由左向右
2.C++运算符优先级

PrecedenceOperatorDescriptionExampleAssociativity
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
if( i == 42 ) ...

if( i != 42 ) ...
left to right
9&Bitwise ANDflags = flags & 42;left to right
10^Bitwise exclusive ORflags = flags ^ 42;left to right
11|Bitwise inclusive (normal) ORflags = flags | 42;left to right
12&&Logical ANDif( conditionA && conditionB ) ...left to right
13||Logical ORif( 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 operatorfor( i = 0, j = 0; i < 10; i++, j++ ) ...left to right
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: