Java核心技术卷I基础知识(原书第9版)
上QQ阅读APP看书,第一时间看更新

3.5.3 位运算符

在处理整型数值时,可以直接对组成整型数值的各个位进行操作。这意味着可以使用屏蔽技术获得整数中的各个位。位运算符包括:

&("与")、|("或")、^("异或")、~("非")

这些运算符在位模式下工作。例如,如果n是一个整型变量,并且用二进制表示的n从右数第4位为1,那么

返回1;否则返回0。通过运用2的幂次方的&运算可以将其他位屏蔽掉,而只保留其中的某一位。

注释:&和|运算符应用于布尔值,得到的结果也是布尔值。这两个运算符与&&和||的运算非常类似,只是不按“短路”方式计算。即在得到计算结果之前,一定要计算两个操作数的值。

另外,“>>”和“<<”运算符将二进制位进行右移或左移操作。当需要建立位模式屏蔽某些位时,使用这两个运算符十分方便:

最后,>>>运算符将用0填充高位;>>运算符用符号位填充高位。没有<<<运算符。

警告:对移位运算符右侧的参数需要进行模32的运算(除非左边的操作数是long类型,在这种情况下需对右侧操作数模64)。例如,1<<35与1<<3或8是相同的。

C++注释:在C或C++中无法确定>>操作执行的是算术移位(扩展符号位),还是逻辑移位(高位填0)。在执行中将会选择效率较高的一种。这就是说,在C/C++中,>>运算符实际上只是为非负数定义的。Java消除了这种含糊性。