位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。在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中称为带符号的位移。位移时需计算其原码、反码、补码,得到结果后,还要对结果计算反码、原码,性能还不如直接使用乘除法。所以,如果是正数,当可以使用位移运算时可以尽量使用,能提升性能,而对于负数来说,还是尽量别用吧,结果与除法相差太远。
原文地址:https://www.cnblogs.com/yybinger/p/12068157.html
时间: 2024-11-05 21:52:04