JAVA位运算

来源:互联网 发布:登录失败网络异常1 编辑:程序博客网 时间:2024/06/15 04:43

摘自《JAVA核心技术》

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

&("与"),|("或"),^("异或"),~("非")。
这些运算符在位模式下工作。例如,如果n是一个整型变量,并且用二进制表示的n从右数第四位为1,那么
int fourthBitFromRight = (n & 8) / 8;
返回1,否则返回0,通过运用2的幂次方的&运算可以将其他位屏蔽掉,而只保留其中的某一位。
敲打注释:&和|运算符应用于布尔值,得到的结果也是布尔值,这两个运算符与&&和||的运算非常类似,只是不按“短路”方式计算。即在得到计算结果之前,一定要计算两个操作数的值。
“>>”和“<<”运算符将二进制位进行右移或左移操作,当需要建立位模式屏蔽某些位时,使用这两个运算符十分方便。
int fourthBitFromRight = (n & (i << 3)) >> 3;
最后,>>>运算符将用0填充高位,>>运算符用符号位填充高位,没有<<<运算符。
敲打警告:对移位运算符右侧的参数需要运行模32的运算(除非左边的操作数是long类型的,在这种情况下需要对右侧操作数模64),例如,1 << 35与1 << 3或8是相同的。
安静C++注释:在C或C++中无法确定>>操作执行的是算术移位(扩展符号位),还是逻辑移位(高位填0),在执行中将会选择效率较高的一种。这就是说,在C/C++中,>>运算符实际上只是为非负数定义的。JAVA消除了这种含糊性。
原创粉丝点击