在操作符中最重要的就是操作符运算顺序:算数运算符>关系运算符>逻辑运算符>赋值运算符>逗号运算符。
操 作 符 :
1.算术运算符
+ - * / %
除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
对于/操作符如果两个操作数都为整数,执行整数除法。只要有浮点数就执行浮点数除法。
%操作符的两个操作数必须为整数。返回的是余数。
2.移位运算符 •二进制中是补码而不是原码
左移:<< (数值变为两倍) 右移: >>(数值缩小一半)
左移规则:左边不要,右边补0.
右移规则:有两种
①逻辑移位:左边补0,右边不要。
②算数移位:左边用原来的符号位填充,右边不要。
记住:对于移位运算符,不要移动负数位。
for example:
int num=10;
num>>-1; //error
3.位运算符(二进制)
① &:按位与 同时为1,则为1,否则为0.
② ||:按位或 同时为0,则为0,否则为1.
③ ^:按位异或 相同为0,不同为1.
for example:不创建第三个变量,交换两个数
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a=%d,b=%d\n", a, b);
return 0;
}
4.赋值运算符
“=”的优先级低于其他的运算符
复合赋值符:-= +=
-= : num -= 10---- > num = num - 10;
+= : num += 10---- > num = num + 10;
5.单目运算符
!逻辑反操作 -负值 +正值 &取地址
sizeof操作数类型长度(以字节为单位) ~对二进制数按位取反
--前置(先自减,再赋值)、后置 ++前置(先自增,再赋值),后置
*间接访问操作符(解引用操作符) (类型名)强制类型转换
6.关系运算符
< > <= >= != ==
关系运算符的值只能为0或1。
结果为真时值为1,结果为假时值为0。
关系运算符的优先级低于算数运算符。
关系运算符的优先级高于赋值运算符。
7.逻辑运算符
①逻辑与:&&只要有一个为0,结果为0;全为1,结果为1。
②逻辑或:||只要有一个为1,结果为1;全为0,结果为0。
③逻辑非:!取运算对象的相反值
注意:逻辑与位运算的区别
1&2----->按位与,结果为0
1&&2---->逻辑与,结果为1
1|2----->按位或,结果为3
1||2---->逻辑或,结果为1
8.条件运算符
条件运算符优先级高于赋值运算符,低于算数、逻辑、关系运算符。
类似于if语句,形式为 ( 表达式1?表达式2:表达式3)
for example:
a>b?a:b //max