清霜一梦

原码,反码,补码

0
阅读(1166)

原码:二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

例:

[+7]反= 0 0000111 B                               [+0]反=00000000B

[-7]反= 1 1111000 B                                [- 0]反=11111111B

[-7]补= 1 1111001 B                                [ 0 ] 补=00000000B (仅此一个)

 

(1) 已知原码,求补码。

负数 :原码——(符号位不变,数值部分按位求反;得反码,再在其反码的末位加1。)—— 补码

2) 已知补码,求原码。

负数 :符号位不变,先取反后加1 ( 或者是先减1后取反)。

    但是需要注意 [1000 0000]补 = =-128,如果按照上面的运算 [1000 0000]补 = [0000 0000]这个是不正确的。

      如果是 8bit, 用补码可以表示的范围是 -128 ~ 127 补码可以多保存一个最小值。

 

个人理解:就像是一个128个刻度的表盘(0-127个数字即[000 0000]-[111 1111]),正转到127=[111 1111] 表示正数127,当转到128的时候归零了。

     在负数里面就是反转一个刻度表示-1 ,反转到-127 = [000 0001],当再反转一个格到[000 0000]的时候这个128给了负数

              也就是0 占用了+128 的位置。

          所以8bit 的补码表示范围是 -128 ~ 127 之间。

 

 

 

本文为复制粘贴的结果,非原创。)——要是我创的别人也不用啊,哈哈