1 运算符概念
1.1概念 运算符是指执行特定算数和逻辑操作的符号
1.2 分类
按功能 算数、关系、逻辑、按位运算符(二进制数据的运算)
按操作数 单目、双目、三目运算符(唯一的,也叫问号表达式 表达式1?表达式2:表达式3; )
1.3 特征
优先级:有15级,第1级为最高
结合性:在运算符优先级相同的情况下,分左结合性(自左至右)和右结合性(自右至左,赋值运算符)
int a = b + 10;
如上,先执行+,自左向右,再执行=,自由向左
2 算数运算符
+ 双目运算符 左结合性
- 双目运算符 左结合性(也可作为负值运算符,此时为单目运算符)
* 双目运算符 左结合性
/ 双目运算符 左结合性(注意:如果参与运算量均为整型,则结果为整型;如果有一个为实型,则结果为实型)
% 求余运算符 双目 左结合(运算量要求为整型)
注意:求余规则 m%n
0 % 5 ; //m=0时,结果为05%0; //n=0时,报错,n不可为07%5; //m>n时,正常求余,结果为25%7; //m<n时,结果为m,即5//结果正负值与m相同
3 赋值运算符
3.1 表达式 用运算符按一定的规则连接起来的有意义的式子,表达式一定有返回值
3.2 赋值运算符= 优先级14级,将等号右侧的值给等号左侧的变量
int a1 , b1 , c1 , d1 ;a1 = b1 = c1 = d1 = 10 ; //表达式语句,(a1 = (b1 = (c1 =( d1 = 10)))),a1结果为10int a2 = b2 = c2 = 10; //报错!!相当于( b2 = c2 = 10)来定义a2
3.3符合赋值运算符(双目运算符,先运算后赋值)
+= a += 3;-------->a = a + 3;后面以此类推
-=
*=
/=
%=
4 自增自减运算符(单目,右结合性)
++
--
注意:单个变量,不能用于常量
++(a + 3); //不行,(a + 3)为表达式,一定有返回值
4.1 前缀表达式
++x
--x
先变后用,先让x的值+1,再取出x的值作为表达式的值
4.2 后缀表达式
x++
x--
先用后变,先取出x的值作为表达式的值,再让x的值+1
int a = 3 , result = 0 ;result = a ++; //a=4 result=3result = ++a; //a=4 result=4
int a = 3 , result = 0 ;result = a +++ a +++ a ++; //result = (a++)+(a++)+(a++),在三个括号中,a的值分别4、5、6,括号内表达式的值分别为3、4、5
5 sizeof运算符
单目运算符,以字节的形式给出了其操作数的存储空间的大小,不是一个函数
用法:
sizeof(常量/变量/结构体名称) //用在常量和变量时,可省略括号
也可用于计算一种数据类型在内存中的字节数
sizeof(int);
6 逗号运算符
表达式1,表达式2
分别求两个表达式的值,并以最后一个表达式的值作为整个逗号表达式的值
注意:逗号表达式可以嵌套
7 关系运算符
>
<
>=
<=
== 判断两个值是否相等,此时应与=(赋值)区分开来
!=
注意:表达式若为真返回1,若为假返回0
int a = 3 , b = 2 , result = - 1 ;result = a > b < 2 ; //a > b返回1,1< 2为真返回1
8 逻辑运算符
&& 与运算 参与运算的都为真才为真,左结合
|| 或运算 只要有一个为真即为真,左结合
! 非运算 取反,右结合
注意:逻辑运算符的短路问题
A&&B 一假为假,如果A为假,B就不执行了,与短路
A||B 一真为真,如果A为真,B就不执行了,或短路
9 三目运算符
格式 表达式1?表达式2:表达式3;
求值顺序 表达式1为真,则表达式2的值作为整个三目运算表达式的返回值
表达式1为假,则表达式3的值作为整个三目运算表达式的返回值
a > b ? a : c > d ? c : d; //a > b ? a :( c > d ? c : d);右结合性