位运算:是直接对整数在内存中的二进制位进行操作,效率高。
位运算的分类:
~ 按位取反
^ 异或
| 按位或
& 按位与
&& 逻辑与
|| 逻辑或
! 逻辑非
<< 左移
>> 右移
>>> 右移 0填充
为了方便,以下二进制位以8位。
位与&:是参与运算的两数各对应的二进位相与,
有0为0,全1为1.
1&2=0
0000 0001 ------1
0000 0010 ------2
---------
0000 0000 ------0
位或|:是参与运算的两数各对应的二进位相或,
有1为1,全0为0.
1|3=3
0000 0001 ------1
0000 0011 ------3
---------
0000 0011 ------3
异或^:是参与运算的两数各对应的二进位相异或,
当两对应的二进位相异时,结果为1;相同时,结果为0.
1^5=8
0000 0001 ------1
0000 0101 ------5
----------
0000 0100 ------8
以上三种无论前者是真还是假,都要判断第二个数。
逻辑与&&:
0&&0=0
0&&1=0
1&&0=0
1&&1=0
前者为假时,不用判断后者。
逻辑或||:
0||0=0
0||1=1
1||0=1
1||1=1
前者为真时,不用判断后者。
逻辑非!:
!0=1
!1=0
左移<<:左边的位被挤掉。对于右边移出的空位,则空位补0.其值相当于乘2.
3<<2=12
0 0 1 1 -----3
1 1 x x -----x为0,即为 1 1 0 0
--------
1 1 0 0 -----12
右移>>:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0;
若为负数,可能补0或补1(符号位),这取决于所用的计算机系统。
其值相当于除以2.
12>>1=6
1 1 0 0 -----12
x 1 1 0 -----x为0,即为0 1 1 0
--------
0 1 1 0 -----6
按位取反~:
~6=9
0 1 1 0 ------6
1 0 0 1 ------9
1和0互换
运算符>>>:右边的位被挤掉。对于左边移出的空位一概补上0;