c/c++ 运算符 优先级 结合性 记录

 c 和c++ 中大部分运算符的优先级和结合性是一致的,但c++中不但引入了一些新的运算符,还对c中的运算符进行了一些修改。需要特别注意。

1. &&优先级比 || 高

2. ++ -- 是整个表达式运算结束或开始前计算的。不只是一个运算符后。

int i=1,j; 

j=i+++i+++i++;    i=4,j=3;

int i=1,m; 

m=++i+++i+++i;   i=4,m=12;

3 a+++++b;

在c/c++语言中为了避免产生二义性,如果一个字符串能够解释为多个操作符,c/c++语言编译器将按照“构成操作符的字符个数越多越好”的原则来作出选择。根据这一原则 解释为 a++ ++ + b; 这就不是一个合法的表达式了。但只要加上空格 a++ + ++b;就合法了。

4.运算符的优先级和求值顺序

int x,y,z;

x=y=z=1;

++x || ++y && ++z;

结果为 x = 2,y=1,z=1.因为“||”操作符的左操作数是TRUE,所以没有必要继续求值了。事实上,c/c++语言肯定不会继续求值--按照c/c++语言里的有关规则,在按从左到右的顺序对一个逻辑表达式求值的时候,只要知道了他的实际结果,就不会再对其余部分求值。

 

 

C语言运算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

15

逗号运算符

表达式,表达式,…

左到右

--

 

c++运算符优先级和结合性

C++运算符优先级表
优先级运算符说明结合性
1 :: 范围解析 自左向右
2 ++   -- 后缀自增/后缀自减
() 括号
[] 数组下标
. 成员选择(对象)
−> 成员选择(指针)
3 ++   -- 前缀自增/前缀自减 自右向左
+   − 正/负号
!   ~ 逻辑非/按位取反
(type) 强制类型转换
* 取指针指向的值
& 某某的地址
sizeof 某某的大小
new, new[] 动态内存分配/动态数组内存分配
delete, delete[] 动态内存释放/动态数组内存释放
4 .*   ->* 成员对象选择/成员指针选择 自左向右
5 *   /   % 乘法/除法/取余
6 +   − 加号/减号
7 <<   >> 位左移/位右移
8 <   <= 小于/小于等于
>   >= 大于/大于等于
9 ==   != 等于/不等于
10 & 按位与
11 ^ 按位异或
12 | 按位或
13 && 与运算
14 || 或运算
15 ?: 三目运算符 自右向左
16 = 赋值
+=   −= 相加后赋值/相减后赋值
*=   /=   %= 相乘后赋值/相除后赋值/取余后赋值
<<=   >>= 位左移赋值/位右移赋值
&=   ^=   |= 位与运算后赋值/位异或运算后赋值/位或运算后赋值
17 throw 抛出异常
18 , 逗号 自左向右
原文地址:https://www.cnblogs.com/zc347656462/p/5830117.html