位逻辑运算符
-
组成及用法:
位逻辑运算符包含 4 个:
&(与): 其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。
|(或): 其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。
~(非,取反):其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。
^(异或):其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。
ps:除了~(即位取反)为单目运算符外,其余都为双目运算符。
-
运算过程实例详解:
&(与 ) 例子:例如下面的表达式
100&0 其运算过程为:
0000 0000 1100 1000 [100]
& 0000 0000 0000 0000 [ 0 ]
0000 0000 0000 0000
二进制位同时为 1,那么计算结果才为 1,否则为 0 这个运算过程,结果为 0。这个运算过程,结果为 0。
*5&12 其运算过程为: *
0000 0000 0000 0101 [ 05 ]
& 0000 0000 0000 1100 [ 12 ]
0000 0000 0000 0100 [ 04 ]
二进制位同时为 1,那么计算结果才为 1,否则为 0 这个运算过程,结果为 0。这个运算过程,结果为 4。
|(或)例子:例如下面的表达式
11|7 其运算过程为:
0000 0000 0000 1011 [ 11 ]
| 0000 0000 0000 0111 [ 7 ]
0000 0000 0000 1111 [ 15 ]
二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。这个运算过程,结果为 15。
~(非,取反)例子:例如下面的表达式
~10 其运算过程为:
****** 0000 0000 0000 1010 [ 10 ]
** ~** 1111 1111 1111 0101 [65525]
只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。这个运算过程,结果为 15。
^(异或)例子:例如下面的表达式
0000 0000 0000 1011 [ 11 ]
^ 0000 0000 0000 0111 [ 7 ]
0000 0000 0000 1100 [ 12 ]
二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。这个运算过程,结果为 12。
补充: >> 和 << 运算符可以将位移模式左移或右移
******位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。表 2 列出了 Java 语言中的两个位移运算符,它们都属于双目运算符。
<< 为左位移运算符: 其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
>> 为右位移运算符: 其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。
例子: 0000 0000 0000 1011
<< 00000 0000 0001 0110
移除 补零