1、运算符
单算移关与,异或逻条赋! 从高到底排列
单目运算符,算术运算符,左移,右移,关系运算符,按位与,异或,按位或,逻辑运算符,条件运算符,赋值运算符
算数运算符
+ - * / % ++ --
注意:%不能用于浮点数
++在前:先自加,在赋值
++在后:先赋值,在自加
注意:当a++或者++a,单独成立一条语句时,都相当于给a+1
1.关系运算符
> < >= <= == !=
关系运算符:比较的结果是真或假
注意:0 < a <5//error
注意!!等号的书写
常量写在等号的左边
(如果判断相等时少写了一个=,会报错)
1.3 逻辑运算符
&& || !
&&:表达式1&&表达式2
截断法则:有一个为假,结果就为假,前一个为假,后面就不再进行运算了!
||:表达式1||表达式2
截断法则:有一个为真,结果就为真,前一个为真,后面就不在进行运算了!
!: !0 为1
1.4 sizeof运算符
Sizeof(变量名)或sizeof(数据类型)
1.5 三目运算符
表达式1?表达式2:表达式3
注意:
判断表达式1,是否成立,如果成立,就将表达式2的值作为整个表达式的值,否则,就将表达式3的值作为整个表达式的值
1.6 逗号运算符
表达式1,表达式2,表达式3,。。。。。。表达式n
从左往右依次计算每个表达式的值,将表达式n的值作为整个表达式的值
(注意:必须依次计算,以防止前面的表达式改变了表达式n中的变量的值)
注意:逗号运算符的优先级是最低的,因此在使用的时候,要加上括号
1.7 位运算符
& | ~ << >> ^
1.7.1 &运算符
都为1,才为1,有一个为0,就为0
1000 0010
& 1100 1111
1000 0010
案例:将1101 0011的0-2位进行清零
1101 0011
& 1111 1000 (~7)
1101 0000
101010100101010100111 0-2位进行清零
111111111111111111000 == ~( 0000000000111) = = ~7
1.7.2 |运算符
都为0 ,才为0,有一个为1,就是1
1000 0010
| 1100 1111
1100 1111
案例:将1101 0101的3~5位 置为101
清零3-5 & 1100 0111 ~(111000) &(~56)
11 000 101
| 00 101 000
11 101 101
101010100101010100111 3-5 置为101
置零(3-5) &111111111111111 000111 ~(000000000111000) = =(~56)
置为101 | 000000000000000 101 000
1.7.3 取反~
0变1,1变0
~(1001 0101)= = 0110 1010
1.7.4 异或^
相同为0,不同为1
1000 0010
^ 1100 1111
0100 1101
1.7.5 左移
Unsigned: 只有正数
没有符号位
1<< 2
1--->0000 0001
高位丢弃,低位补0
补零:0000 0100 : 4
Signed:-1<<2
原码:1000 0001
反码:1111 1110
补码:1111 1111
符号位不变,高位丢弃,低位补0
补0:1111 1100
反码:1000 0011
原码:1000 0100 :-4
1.7.6 右移
Unsigned:只有正数
没有符号位
>2
低位丢弃,高位补0
0000 0100
补零:0000 0001 :1
Signed: 正数+负数
有符号位
-4 >>2
符号位不变,低位丢弃,高位补1
-4 的原码:1000 0100
反码:1111 1011
补码:1111 1100
补1: 1111 1111 1000 0000+1 = 1000 0001 = -1