一,操作符分类
算数操作符:+ - * / %
%的两个操作数都是整数
% 和 / 的除数都不能为0
移位操作符:<< 左移操作符 >> 右移操作符
左移操作符:左边抛弃,右边补0
右移操作符:
- 逻辑移位:左边用0填充,右边抛弃(无符号数字)
- 算数移位:左边用本值得符号位填充,右边抛弃(有符号数)
- 对于移位运算符,不要移动负数位,这个标准未定义。
位操作符: & 按位与 | 按位或 ^ 按位异或
& :有1为1
| :有0为0
^ :相异为1,相同为0
对于按位异或操作符有以下几点性质:
- 异或运算符合交换律
- 任何数与它本身异或都是0
- 任何数和0异或都是它本身
赋值操作符:=
复合赋值符:+= -= *= = %= >>= <<= &= |= ^=
C语言允许连续赋值:
int a=10;
int x=0;
int y=20;
a=x=y+1;//连续赋值,编译能通过
要改变一个变量的内容就要通过赋值语句
int a=10;
a>>1;//未赋值,没有改变a的内容
a>>=1;//通过赋值改变了a的内容
单目操作符
! 逻辑反操作符
取反结果为真(1),取反结果为假(0)
+ 正值
- 负值
& 取地址
sizeof 操作数类型长度(以字节为单位)
1, sizeof操作符计算的是变量(类型)所占空间的字节个数,sizeof(a+b)里面的表达式不会参与运算,若a,b为int型,则输出结果为4。
2, 数组传参是要发生降维,会降维为一个指向其内部元素类型的指针,次数用sieof(数组名)是无法算出数组大小的,只能算出一个指针的大小(4字节)
~ 对一个数的二进制按位整体取反
– 前置,后置- -
++ 前置,后置++
** * 间接访问操作符**
(类型) 强制类型转换
关系操作符
大于
< 小于
= 大于等于
<= 小于等于
!= 不等于
== 等于
逻辑操作符
&& 逻辑与
一假则假:1&&0—0
|| 逻辑或
一真则真:1||0----1
条件操作符(三目运算符)
exp1?exp2:exp3
逗号操作
exp1,exp2,….exp
从左往右依次执行,整个表达式结果是最后一个表达式的结果
Int a=0;
Int b=2;
Int c=(a>b,a=b+10,b=a+1);//c=13
下标引用,函数调用和结构成员
[ ]下标引用操作符
操作数为一个数组名加上一个索引值arr[9]=10;
( )函数调用操作符
接受一个或者多个操作数,函数名和传递的参数,text(n)
. 访问一个结构的成员
结构体.成员名
-> 结构体指针->成员名