二进制字节码的左移、右移、逻辑右移运算

目录

    • 1、机器码
    • 2、<< 左移运算符
    • 3、>> 右移运算符
    • 4、>>> 无符号右移(逻辑右移)运算符

1、机器码

  • 机器码就是cpu能够直接读取并运行的代码,用二进制编码表示,也叫做机器指令码
  • 计算机中的机器码是用补码存储

这里以8位字节码为例

正数 7
原码 0 0 0 0   0 1 1 1
反码 0 0 0 0   0 1 1 1
补码 0 0 0 0   0 1 1 1
负数 -7
原码 1 0 0 0   0 1 1 1
反码 1 1 1 1   1 0 0 0
补码 1 1 1 1   1 0 0 1

注:
最高位表示正负,0为正,1为负
正数的原码,反码,补码相等
负数的反码等于原码取反,补码等于反码加一

2、<< 左移运算符

无论正负,低位补0

4 << 1

等价于 补码 0000 0100 ->  0000 1000

结果:8

总结:在不超过精度的情况下,a << n 相当于 a * 2^n
-4 << 1
原码:1000 0100 
补码:1111 1100

等价于 补码 1111 1100 ->  1111 1000

转为反码为:1111 0111 转为原码:1000 1000
结果:-8

总结:在不超过精度的情况下,-a << n 相当于 -a * 2^n

3、>> 右移运算符

正数高位补0,负数高位补1

4 >> 1

等价于 补码 0000 0100 ->  0000 0010

结果:2

总结:在移除的全为0的情况下,a >> n 相当于 a / 2^n
-4 >> 1
原码:1000 0100 
补码:1111 1100

等价于 补码 1111 1100  -> 1111 1110

转为反码为:1111 1101 转为原码:1000 0010
结果:-2

总结:在移除的全为0的情况下,-a >> n 相当于 -a / 2^n

4、>>> 无符号右移(逻辑右移)运算符

无论正负,高位补0

4 >>> 1

等价于 补码 0000 0100 ->  0000 0010

结果:2

总结:在移除的全为0的情况下,a >> n 相当于 a / 2^n
-4 >>> 1
原码:1000 0100 
补码:1111 1100

等价于 补码 1111 1100  -> 0111 1110

结果:126

你可能感兴趣的:(Java,java)