C语言—操作符
操作符:顾名思义就是进行一些特定运算的符号,比如:+ - * /
分类
- 算术操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号表达式
-
下标引用、函数调用和结构成员
00.算术操作符
+ - * / %
加减乘法都和数学里的一样
除法,如果除号两边都是整数,结果也是整数,例如:7/2=3
如果除号两边有浮点数,则结果也是浮点数,例如:10/2.5=4.0-
取余操作符%,两边必须为整数,结果也是整数,例如:7%3=1,意为7除以3余1
01.移位操作符
左移操作符 <<
右移操作符 >> 移位操作符是针对一个数的二进制序列而言的
左移规则:左边丢弃,右边补0
例如:0101 0110 左移1位 变成1010 1100-
右移规则:分为两种
1.算术右移:右边丢弃,左边用原值符号位填充
例如:1001 0010 算术右移1位 变成1100 1001
ps:大多数编译器都采用算术右移2.逻辑右移:右边丢弃,左边补0
-
不能移动负数位
02.位操作符
按位与 &
按位或 |
按位异或 ^ 位操作符的操作数必须为整数
按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。规则为:
1&1=1
1&0=0
0&1=0
0&0=0按位或“|”,规则为:
1 | 1 = 1,
1 | 0 = 1,
0 | 1 = 1
0 | 0 = 0按位异或“^”,规则为:
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0-
位操作符都是针对二进制序列的补码操作
03.赋值操作符
赋值操作符 =
就是将一个值赋给一个变量,例如a=0 就是将0赋给了a
- 复合赋值符:
-
例如a+=2 就相当于 a=a+2 以此类推
04.单目操作符
-
注:
int* p = NULL; //这里的*不是解引用操作符
*p = 20;//这里的*才是解引用操作符 a=i++表示先把 i 的值赋给a,然后 i 再加1;a=++i 表示 i 先加1,再赋值给a
sizeof(arr)/sizeof(arr[0]) 表示求一个数组的元素个数
-
取地址 &数组名—数组名表示整个数组–这里取出的是整个数组的地址
除此之外,所有的数组名都表示数组首元素的地址05.关系操作符
大于 >
小于 <
大于等于 >=
小于等于 <=
不等于 !=
判断是否相等 ==
-
if(5 == a)//这里将常量写在操作符左边,可以避免因为少写一个等号而出错
06.逻辑操作符
- 逻辑与&& ,0为假,非0为真,例如:5&&0=0
-
逻辑或||,例如:5||0=1
07.条件操作符
exp1 ? exp2 : exp3
-
意为:如果表达式1为真,执行表达式2,否则执行表达式3
08.逗号表达式
exp1,exp2,exp3,……expn
-
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。09.下标引用、函数调用和结构成员
[ ] 下标引用
例如arr[1] 表示arr数组的第一个元素
() 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
. -> 访问一个结构的成员
结构体 . 成员名
结构体指针 -> 成员名