7.13.1 原码反码补码

计算机中的符号数有三种表示方法,即原码、反码和补码。

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

在计算机系统中,数值一律用补码来表示和存储。

原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

正数的原码、反码、补码都相同。

原码:就是二进制表示,最高位为符号位,0表示正,1表示负

反码:负数的反码,就是逐位取反(符号位除外)

补码:负数的补码,反码末位加1.

正数5:

二进制:00000101
原码:00000101
反码:00000101
补码:00000101

负数5:

二进制:10000101
原码:10000101
反码:11111010
补码:11111011

计算: 2-1

2-1 = 2 + (-1)

2 000000100000001000000010

-1 100000011111111011111111

负数的补码求原始数据步骤:1. -12. 取反3. 符号位改为1

1111111111111110

2

    00000010 
-1  11111111
    00000001

计算:2-3 = 2 + (-3) = -1

2 000000100000001000000010

-3100000111111110011111101

2 00000010-3 11111101 11111111

 

 

-128是人为规定的。
因为8位2进制中,存在 “-0”(1000 0000)和"0"(0000 0000),虽然“-0”也是“0”,但根据正、反、补码体系,“-0”的补码和“+0”是不同的,这样就出现两个补码代表一个数值的情况。为了将补码与数字一一对应,所以人为规定“0”一律用“+0”代表。同时为了充分利用资源,就将原来本应该表示“-0”的补码规定为代表-128。

 

验证 1000 0000 到底是0还是-128,先假设为X
则     2+X=?
            0000 0010
            1000 0000
            1000 0010       -->     1000 0001      -->      0111 1110
            即为正负126
所以X=-128或X=124,显然应该取负数解!

posted @ 2017-08-24 13:22  ~~晴天~^.^  阅读(803)  评论(0编辑  收藏  举报