Java位移运算

Posted 非阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java位移运算相关的知识,希望对你有一定的参考价值。

位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。在Java中,位移运算分为左位移和右位移,符号为<<和>>。

左位移运算符

左位移的符号是<<,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

例如,将整数 11 向左位移 1 位的过程如图所示:

技术图片

从图中可以看到,原来数的所有二进制位都向左移动 1 位。原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位。最终到的结果是 22,相当于原来数的 2 倍。

对于正数的左位移,向左位移几次,就乘以2的几次方。比如5向左位移3次,表示为:5<<3,结果为5乘以2的三次方,等于30。

右位移运算符

右位移的符号是>>,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。

例如,将整数 11 向右位移 1 位的过程如图所示:

技术图片

从图中可以看到,原来数的所有二进制位都向右移动 1 位。原来位于右边的最低位 1 被移出舍弃,再向最高位追加 0 补位。最终到的结果是 5,相当于原数整除 2 的结果。

对于正数的右位移,向右移动几次,就除以2的几次方。比如5向右位移一次,表示为5>>1,结果为5除以2,等于2。

总结

对于负数来说,Java中的位移应该谨慎使用,因为位移运算在Java中称为带符号的位移。位移时需计算其原码、反码、补码,得到结果后,还要对结果计算反码、原码,性能还不如直接使用乘除法。所以,如果是正数,当可以使用位移运算时可以尽量使用,能提升性能,而对于负数来说,还是尽量别用吧,结果与除法相差太远。

以上是关于Java位移运算的主要内容,如果未能解决你的问题,请参考以下文章

Java 位移运算符

Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)

Java深入学习05:位移运算

golang位移运算

如何运用Java中的位移运算符?

Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)只出现一次的数字