C++ 运算符优先级列表

http://www.cppreference.com/operator_precedence.html

Precedence Operator Description Example Associativity
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](http://www.cppreference.com/keywords/sizeof.html)
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 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 evaluation operator for( i = 0, j = 0; i < 10; i++, j++ ) ... left to right

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

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

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

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

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

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

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

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

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

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

算术、关系、逻辑。

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

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

关系运算符中,》,》=,《,〈=高于==,!=。

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

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

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

去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。

原文链接: https://www.cnblogs.com/lightBase/archive/2012/10/08/2714807.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/65133

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午11:41
下一篇 2023年2月9日 上午11:41

相关推荐