原码、反码、补码 和位移符号

    xiaoxiao2025-01-12  13

    正数的原码、反码、补码是相同的,所以这里不讲正数的原反补,只讲负数。 前提知识: 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的补码 -76的反码 -76的原码 2、>> >>对-19的补码的数据位右边移两位,符号位不动,补1(和左移不同),得到 -5的补码 -5的反码和原码就不再贴出来了。 3、>>> >>>和>>、<<不同,它不管符号位,也就是符号位它也右移,补0 对-19补码右移两位 这时候注意它是一个正数了,所以直接上面是a>>>2的补码,也是a>>>2的补码 a>>>2 == 1073741819

    最新回复(0)