计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
在补码表示法中, 正数的补码与正数的原码相同, 负数的补码由它的反码加 1 形成。例如:
(+ 30) 补 = ( + 30) 原 = 00011110
( - 30) 补 = (- 30) 反 + 1 = ( + 30) 原 + 1 = 11100001 + 1 = 11100010
注意:
(1) 8 位二进制补码能表示数的范围为- 128~+ 127。
(2) 在补码中, + 0 与- 0 的表示法相同。
(3) 当符号位为 0 时, 其余位为数的真值; 当符号位为 1 时, 其余位按位取反再加 1 后 才是数的真值。
补码求原码:
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。