左移(<<)右移(>>) 无符号右移(>>>)
在了解这个之前我们先了解下 计算机中负数 = 正数取反+1
0000 0000 0000 0000 0000 0000 0000 1010 为10
1111 1111 1111 1111 1111 1111 1111 0110 为-10
测试代码
测试结果为:
1010十进制为10
左移一位10100十进制为20
右移一位101十进制为5
无符号右移一位101十进制为5
分割线.______________________________________
1111 1111 1111 1111 1111 1111 1111 0110十进制为-10
左移一位11111111111111111111111111101100十进制为-20
右移一位1111 1111 1111 1111 1111 1111 1111 1011十进制为-5
无符号右移一位1111111111111111111111111111011十进制为2147483643
分割线.______________________________________
0111 1111 1111 1111 1111 1111 1111 1111十进制为2147483647
左移一位1111 1111 1111 1111 1111 1111 1111 1110十进制为-2
右移一位0011 1111 1111 1111 1111 1111 1111 1111十进制为1073741823
无符号右移一位111111111111111111111111111111十进制为1073741823
分割线.______________________________________
1000 0000 0000 0000 0000 0000 0000 0000十进制为-2147483648
左移一位0十进制为0
右移一位 1100 0000 0000 0000 0000 0000 0000 0000十进制为-1073741824
无符号右移一位0100 0000 0000 0000 0000 0000 0000 0000十进制为1073741824
分割线.______________________________________
可见 左移一位是所有的位置都向左移动一位 右边补0
32位字节码中第一位为0第二位为1 和
第一位为1 第二位为0 的情况下向左移动一位不会得到原值的二倍,其他情况可以得到原值的二倍
右移一位是所有的位置都向右移动一位,左边根据符号位为0或1 来补0或1
右移动一位不论正数和负数都是原值/2
无符号右移一位是是所有的位置都向右移动一位,左边补0
正数和0的时候都是可以得到为原值/2