首先我们先看下关于左移右移的Java代码及其结果:
class BitOperation {
public static void main(String[] args) {
System.out.println("3<<2" + 3<<2);
}
}
输出结果为:12
注:我们常说的
左移右移
都是指的是对原数据换算成二进制之后的操作
左移操作(<<)
规则:
右边空出的位用0填补
高位左移溢出则舍弃该高位。
即 3
在32位计算机中的存储为(前后两条黑色竖线人为添加以方便于识别):
| 0000 0000 0000 0000 0000 0000 0000 0011 |
左移2
位结果如下:
00 | 00 0000 0000 0000 0000 0000 0000 0011 XX |
左移两位高位溢出,舍弃,低位也就是XX
的位置空余,则补0变为:
| 0000 0000 0000 0000 0000 0000 0000 1100 |
再转换为十进制数:输出即为:12
。
我们再看个例子:这次操作 3<<3
位,大家计算看看:答案为:24;
| 0000 0000 0000 0000 0000 0000 0001 1000 |
大家也可以对其他数字进行左移操作试试,经过多次操作我们可以得出:左移几位其实就是该数据乘以2的几次方;
也就是以上例子可以通过以下式子快速算出:
3<<3
== 3(2)^3 = 38 = 24;
3<<2
== 3(2)^2 = 34 = 12;
右移操作(>>)
左边空出的位用0或者1填补。正数用0填补,负数用1填补。
简单点记:就是高位是什么就用什么补!
例如:6>>1
| 0000 0000 0000 0000 0000 0000 0000 0110 |
我们进行右移操作
| 0000 0000 0000 0000 0000 0000 0000 0011 | 0
则结果为 6>>1 = 3
== 6 / (2^1)
大家也可以对其他数字进行左移操作试试,经过多次操作我们可以得出:右移几位其实就是该数据除以2的几次幂,若为小数,取整即可;
-6>>2 = 3
== - 6 / (2^2) = -1
网友评论