Skip to content

表达式与运算符

目录


判断表达式:

c
(3==3)		//正确则值为1,否则为0
(a<b<c<=a)	//a=1,b=2,c=3	//输出1
			//a<b=1,1<c=1,1<a=1所以输出1

条件表达式:

c
x>y?1:1.5
//条件表达式的值的类型为二者中较高的类型
//输出1.0(双精度)或1.5

运算

c
a=b=c;//允许连等
a=(b=4)+(c=6) // a=10
(a=3*5)=4*3//a=12
-5/3  //可能得到-1和-2(一般取靠近0的那个数)

复合赋值运算符,后 5 种与位运算有关

c
+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|

左右结合

左结合运算符:

  • 同级别下从左向右进行运算:
  • 左边的变量调用运算符
c
a*b/c=(a*b)/c

右结合运算符:

  • 同级别下从右向左进行运算
  • 右边的变量调用运算符
c
m=m*i++;//i先运算再自加
m=m*++i;//i先自加再运算

逗号

  • cout 时用逗号要加括号
  • 表达式的值一最后一个表达式为准
c
a=3*5,a*4//a=15,表达式的值为60
(a=3*5,a*4),a+5//a的值为15,表达式的值为20
  • 注意
c
if(a=0){
	// 不会执行这段,因为最终传到判断框的是a的值
}
if(a=<一个非0的什么东西>){
    // 会执行这段函数
}
//就,原理参考逗号的作用

&|

  • &| 用于位运算
c
a=3&5;//a=1
// 3=0011
// 5=0101
// 1=0001


a=3|5;//a=7
// 3=0011
// 5=0101
// 7=0111

<< 和 >>

  • <<>> 用于移位运算
c
a=3<<2;//a=12

// 3=0011
// 3<<2=1100=12

优先级

优先级运算符结合性含义C/C++
1::作用域解析运算符C++
2(表达式)分组
2()L-R函数调用
2()值构造,即 type(expr)C++
2[]数组下标
2->间接成员运算符
2.直接成员运算符
2const_cast专用的类型转换C++
2dynamic_cast专用的类型转换C++
2reinterpret_cast专用的类型转换C++
2static_cast专用的类型转换C++
2typeid类型标识C++
2++加 1 运算符,后缀
2--减 1 运算符,后缀
3!R-L逻辑非
3~位非
3+一元加号(正号)
3-一元减号(负号)
3++加 1 运算符,前缀
3--减 1 运算符,前缀
3&地址
3*解除引用(间接值)
3()类型转换,即(ype)expr
3sizeeof长度,以字节为单位
3new动态分配内存C++
3new []动态分配数组C++
3delete动态释放内存C++
3delete[]动态释放数组C++
4.*L-R成员解除引用C++
4->*间接成员解除引用C++
5*L-R
5/
5^模(余数)
6+
6-
7<<L-R左移
7>>右移
8<L-R
8<=
8>=
8>
9==L-R
9!=
10&L-R按位 AND
11^L-R按位 XOF(异或)
12|L-R按位 OR
13&&L-R逻辑 AND
14||L-R逻辑 OR
15:?R-L条件
16=R-L简单赋值
16*=乘并赋值
16/=除并赋值
16%=求模并赋值
16+=加并赋值
16-=减并赋值
16&=按位 AND 并赋值
16^=按位 XOR 并赋值
16|=按位 OR 并赋值
16<<=左移并赋值
16>>=右移并赋值
17throwL-R引发异常C++
18,L-R将两个表达式合并成一个

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1