目录
今天学了一部分操作符,虽然是一部分,但是实在是太多了,就挑几个特别的。
1、移位操作符
2、位操作符、
3、逻辑操作符
1、移位操作符
移位操作符有两种,分别是:<<左移操作符 >>右移操作符
注意:移位操作符只能操作整数
整数的二进制表示
在了解操作符之前,需要先了解整数的二进制表示:分别是原码、反码、补码
正整数的原码、反码、补码相同
eg:
7 --- 111 --- 00000000000000000000000000000111 --- 7的原码(也就是反码和补码)
(高位(第一位,又叫符号位)是0表示正数,1是负数)(int为4byte=32bit)
-7 --- 10000000000000000000000000000111 --- -7的原码
11111111111111111111111111111000 --- -7的反码(原码的符号位不变,其它位按位取反)
11111111111111111111111111111001 --- -7的补码(反码+1就是补码)
负整数的原码、反码、补码需要通过简单计算得到
eg:
-7 --- 10000000000000000000000000000111 --- -7的原码
11111111111111111111111111111000 --- -7的反码(原码的符号位不变,其它位按位取反)
11111111111111111111111111111001 --- -7的补码(反码+1就是补码)
整数在内存中的储存用的是补码,因此移位操作符操作的是整数的补码
<<左移操作符
将操作对象在内存中的补码左边丢弃,右边补零
由二进制的性质可知,当a向左移n位的时候,b等于a*2的n次方(负数同样适用)
>>右移操作符
右移操作符分两种:
1、算数位移:将右边第一位舍弃后左边用高位填充
2、逻辑位移:将右边第一位舍弃后左边用0填充
编译时,程序采用哪种右移操作符取决于编译器(如VS2022采用算数位移)
2、位操作符
位操作符有三种:&按位与、|按位或、^按位异或
&按位与
对两个数进行操作时,两个数的补码一一对应,只要两个补码的对应位中有一个为0,那么按位与的结果就是0
| 按位或
只要两个补码的对应位中有一个为1,那么按位与的结果就是1
^按位异或
相同为0,相异为1
异或的特点
1、两个相同的数异或为0(0 ^ a = a) (a ^ a = 0)
2、异或支持交换律(如下,利用异或的特点)
3、逻辑操作符
逻辑操作符有两种:&&逻辑与、||逻辑或
&&逻辑与
只要左右任一为假,整体为假
||逻辑或
左右任一为真,整体为真
&&和||在使用时的区别
&&:代码从左向右算,在“a++”时,a先用再算,&&左边为0,右边不进行计算,即后面的内容都失效
||:只要出现“真”,后面不再计算,即失效