一、运算符的类型:
算术运算符、 逻辑运算符、关系运算符、位运算符、赋值运算符、 递增递减运算符、地址运算符、逗号运算符、sizeof运算符、三目运算符
1.算术运算符
+ - * / %(只能是整形数值)
2.逻辑运算符
逻辑与:&& 逻辑或:|| 逻辑非:!
真,假: 非零为真, 零为假
逻辑与:&& 全真为真, 有假就假
表达式1 && 表达式2
真 真 真
假 真 假
真 假 假
假 假 假
逻辑或:|| 有真就真, 全假才假
表达式1 || 表达式2
真 真 真
假 真 真
真 假 真
假 假 假
逻辑非:!
!(表达式)
如果表达式为真, 整体为假
假 真
短路法则:
逻辑与,如果对一个表达式为假, 那么整体为假, 后面的表达式不会执行
逻辑或,如果对一个表达式为真, 那么整体为真, 后面的表达式不会执行
3.关系运算符
> < == >= <= !=
4.位运算符
>> << & | ~ ^
&:
1&1=1 1&0=0 0&1=0 0&0=0
|:
1|1=1 1|0=1 0|1=1 0|0=0
~:
~0 = 1 ~1 = 0
^: 1^1=0 1^0=1 0^1=1 0^0=0
任意两个整形数值异或自己等于0
正数三码合一
原码:最高位作为符号位, 其余位表示数值位
0的原码有两个表达:
+0 00000
-0 10000
+7 0000 0111
-7 1000 0111
反码:符号位不变,其余为取反
+7 0000 0111
-7 1111 1000
补码:在反码的基础上加1(比原码多了一个-2^n)
+7 0000 0111
-7 1111 1001
带符号的补码表示范围(-2^n-1 ~ (2^n-1)-1)
补码转原码:
(1)逆推
(2)补码的补码就是原码
这里说的是补码的左移右移:
<< :
左边移出,右边补零
>> :
右边移出,左补符号位
单片机:把某几位清零,把除了某几位清零
......1101 1110 5、6位清0 11
......0011 0000 <<4
......1100 1111 ~
......1100 1110 和原数进行位与运算
5.赋值运算符
= += -= *= /= %=
a = 10;
a += 5; a = a + 5;
a -= 5; a = a - 5;
a *= 5; a = a * 5;
a /= 5; a = a / 5;
a += b + c; a = a + b + c;
a *= b + c; a = a * (b + c);
注意:等号的左边不能为常量(常量不能做左值)
6.递增递减运算符
++ --
a++; a = a + 1;
++a;
1.++ -- 独自成句
2.参与运算
前++ 前--, 先进行自增自减运算,再取值;
后++,后--, 先取值, 再进行自增自减运算
eg:
int a = 10, b = 20, c;
c = ++a + b--;
3.在函数中使用
a=10;
printf("%d,%d,%d,%d,%d",++a,a--,a,++a,a++);
12 12 12 12 10
前++、--、 a, 在内存中取值(运算完)
后++、-- ,在寄存器中取值
7.逗号运算符
表达式1, 表达式2, ..., 表达式n) 小括号里面的表达式都会执行;整体的值为最后一个表达式的值。
8.sizeof运算符
计算数据类型的大小 --- 字节
9.三目运算符
用于简单的选择判断
表达式1 ? 表达式2 : 表达式3
eg:
int a = 10, b = 20, c;
ptintf(“%d”, a > b ? a : b);
10.地址运算符
&