1.7、C语言基本运算符

算术运算符:+ - * / % ++ –
++、–在前,先自加/直减 然后参与运算
++、–在后,先参与运算 然后自加/直减
如果++、–单独为一行代码的时候,不考虑上述问题

关系运算符:< > <= >= == !=
用于做多个数据之间的比较,数据之间的比较结果只可能是0(false)或1(true)

特殊运算符
三目运算符: 表达式?当表达式成立返回的内容:当表达式不成立返回的内容

逻辑运算符: && 与 、 || 或 、 ! 非
用于连接多个条件表达式
&&: 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:0 !0:1 成立的条件取!变为不成立,不成立的条件取!变为成立

位运算
&(按位于) 、 |(按位或)、 ^(按位异或)、 ~(按位取反) 、>>(右移)、 <<(左移)

1、&(按位于):与0得0
char a = 9;
char b = a & 7;

0000 1001 &0000 0111 = 0000 0001
b = 1;
两个数进行按位于操作,两个数的二进制位都为1,结果为1,否则为0

char a = 10;
char b = a ^ 8;
0000 1010 ^ 0000 1000 = 0000 0010
b = 2;

2、|(按位或):或1得1

3、 ^(按位异或):相同为0,不同为1

4、~(按位取反) :是对该数的补码进行按位取反+ 13
0000 1101–原码
0000 1101–反码
0000 1101–补码
~ 1111 0010 补码是负数
1111 0001 反码
1000 1110 原码

正数: 原码 – 反码-- 补码 相同
负数: 原码取反–补码–+1 反码
补码 -1—反码-- 反码取反–原码

在计算机内存中存储一个数,存的是该数的补码
char a1 = 0b11111111; 二进制表示-1
char a2 = 0xff; 十六进制表示-1
char a3 = -1; 十进制表示-1
在内存存储中表现方式是一样,二进制存储

思考
1).如何将一个数快速的清0 ------------- 与上等位的0
2).如何将一个数快速的置1 ------------- 或上等位的1
3).将某一位清0 ------------- 与上相同位的0,其他位为1
4).将某一位置1 ------------- 或上相同位的1,其他位为0

5、>>(右移) :将数据按位向右移动
a >> 2; //不会改动a的值
a = a >> 2; //会改动a的值

char a = 10;
char b = a >> 2;
0000 1010 >> 0000 0010 b = 2;

6、<<(左移) : 将数据按位向左移动
char a = 10;
char b = a >> 2;
0000 1010 >> 0000 0010
b = 0x02;
a = 10;
b = a << 2;
0000 1010 << 0010 1000
b = 0x28;
b = 40;

左移/右移操作同样可以用于快速清零。

赋值运算符
1、= 将右边操作数的值给左边操作数 c = a + b;
2、+= 将左边操作数加上右边操作数的结果赋值给左边的操作数 a +=b —> a = a+b;
3、-= 将左边操作数减上右边操作数的结果赋值给左边的操作数 a =b —> a = a-b;
4、*= 将左边操作数乘上右左边操作数的结果赋值给左边的操作数 a = b —> a = ab;
5、/= 将左边操作数除上右边操作数的结果赋值给左边的操作数 a /= b —> a = a/b;
6、%= 将左边操作数模上右边操作数的结果赋值给左边的操作数 a %= b —> a = a%b;
7、<<= 左移且赋值运算符 a <<= b —> a = a<<b;
8、>>= 右移且赋值运算符 -a >>= b —> a = a>>b;
9、&= 按位与且赋值运算符 a &= b —> a = a&b;
10、|= 按位或且赋值运算符 a |= b —> a = a|b;
11、^= 按位异或且赋值运算符 a ^= b <==> a = a^b;

特殊运算符
1、三目运算符
?:表达式?表达式成立执行的内容:表达式不成立执行的内容
2、逗号运算符 , 在表达式中,决定最后的内容,逗号运算符的结合性是从左到右,完毕过后整个表达式的值是最后一个表达式的值
4、sizeof() 求取数据类型或者变量的大小,单位是字节
与变量值无关,与数据类型有关,求取的是占用的内存空间,返回长整型
& 取地址符 :返回的是变量的地址 int a = 10; &a;将变量a的实际地址给出
* 指针运算符 :*指向一个变量

运算优先级
15级 ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符 在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41110647/article/details/106314167