& 按位与、| 按位或 、^ 按位异或、~ 取反运算、<< 左移、>> 右移
1、& 按位与
当两个相应的位进行与运算,则遵循有0得0,全1得1的原则。举个例子,如:
1010
0110
将上面两个进行按位与运算,得 0010
2、| 按位或
当两个相应的位进行或运算,则遵循有1得1,全0得0的原则。举个例子,如:
1010
0110
将上面两个进行按位或运算,得 1110
3、^ 按位异或
当两个相应的位进行按位异或运算,则遵循相同得0,不同得1的原则。举个例子,如:
1010
0110
将上面两个进行按位异或运算,得 1100
4、~ 取反运算
当对一个数的位进行反运算,则遵循遇0得1,遇1得0的原则。举个例子,如:
1010
将上面这个数进行按位取反运算,得 0101
5、<< 左移
当对一个数的位进行左移运算,是指将该数每一个位相应的向左移一位,最后一位补0。举个例子,如: 1010
将上面这个数进行左移运算,得 0100
再比如, 1<<3,首先在计算机中,将1表示成二进制数(通常为4字节表示,即共32位),那么1就表示成 0000 …… 0000 0001 ,将其左移3位,得 0000 …… 0000 1000 ,变成十进制数就是8,即1<<3=8
再比如,-8<<3,首先将-8表示成二进制数,这里简单复习一下,将负数转换成二进制数,就是将该数的正数,用二进制表示,然后对其所有位取反之后再加1,便得到该负数的二进制形式(其实也就是它的补码形式)。
那么-8的正数8,表示成0000 …… 0000 1000
取反得1111 …… 1111 0111
然后加1得1111 …… 1111 1000 (这个便是-8的二进制数表示形式)
然后左移3位得1111 …… 1100 0000 (转换为十进制得-64)
6、>> 右移 (同理)
举个例子,如: 1010
将上面这个数进行左移运算,得 0101
注意:如果是正数,右移和左移操作是一个道理,空出的位补0即可,但是如果是负数,那么 右移时空出的所有位用符号为填补。
举个例子,-8>>3
首先将-8表示成二进制数:1111 …… 1111 1000
然后右移3位得1111 …… 1111 1111 (故-8>>3=-1)
补充:
复合运算符 |=、&=
|=:如A|=B等价于A=A|B,即A和B先进行按位或运算,然后把结果赋给A
&=:如A&=B等价于A=A&B,即A和B先进行按位与运算,然后把结果赋给A