一、Java中的原码、反码和补码
1、以byte型数据为例,每个数值占8位,第一位是符号位,正数是0,负数是1
2、正数:原码、反码和补码是一样的
例如:2
原码:0000 0010
3、负数:反码是给原码的数字位(除符号位)的每一位取反,补码是给反码加1
例如:-2
原码:1000 0010
反码:1111 1101
补码:1111 1110
二、移位操作
1、Java中的移位一般分为左移(<<)、右移(>>)、无符号右移(>>>)。所有的移位操作都是针对补码
2、左移:数值的补码全部左移n位,舍弃符号位,右边的低位补0
2的补码:0000 0010 2
左移2位:0000 1000 8
-2的补码:1111 1110 -2
左移2位:1111 1000 -8
3、右移:数值的符号位不变,数字位的补码全部右移n位,左边补符号位
16的补码:0001 0000 16
右移2位: 0000 0100 4
-16的补码:1111 0000 -16
右移2位: 1111 1100 -4
4、无符号右移:数值的所有位包括符号位都全部右移,前边补0
-16的补码:1111 0000 -16
右移2位: 0011 1100 60