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