正数的原码、反码、补码是相同的,所以这里不讲正数的原反补,只讲负数。
前提知识:
1)符号位“0”代表正,符号位“1”代表负;
2)负数的反码由原码各数据位取反、符号位不变得到;
3)负数的补码由反码加1得到;
4)计算机运算均以补码形式运算,这是说 + - * % >> << >>>这些操作都是用补码计算。
反过来,负数的反码可由补码减1得到,负数的补码可由反码各数据位取反、符号位不变得到。
注意上图针对负数,使用上述规则需要确认符号位是否为“1”,即是负数。
以 int a = -19
为例,求得
a<<2 == -76
a>>2 == -5
在java里int占4个字节长度空间,即 有4*8=32 bit,其中最高位为符号位。
-19原码
-19反码
-19补码
1、<<
<<对-19的补码的数据位左移两位,符号位不动,补0,得到
-76的补码