原码、反码、补码
在计算机中表示的带符号的二进制数称为“机器数”(用形式上的码表示真实的数)。机器数有3种表示方式:原码、反码和补码。
机器数的最高位为符号位,0表示正数,1表示负数,数值跟随其后。
原码是与真值最接近的一种表示形式。
原码的定义:
[X]原 ={ X ? (0 ≦ X <1)
1 - X = 1 + |X|? (-1 < X ≦ 0)}
即[X]原 = 符号位 + |X|
例:X = -0.1011,[X]原 = 1-X=1.1011
数值零的真值有 +0 和 -0 两种表示形式,其原码也有两种表示形式:[+0]原 = 00000,[-0]原 = 10000
当运算结果不超出机器能表示的范围时,运算结果仍以原码表示。
机器数的最高位为符号位,0表示正数,1表示负数。其余取反。
反码零有两种表示形式:
[+0]反=0.0000 ? [-0]反=1.1111
机器数的最高位为符号位,0表示正数,1表示负数。
串行求补:从末位开始,连续的0不变,第一个1也不变,其余取反。
补码的定义:(反码+1)
[X]补 = { X (0 ≦ X < 1)
? 2 + X = 2 - |X| (-1 ≦ X < 0)}
即 [X]补 = 2 · 符号位 + X mod2
此处,2为十进制数,即二进制的10。
例:X = -0.1011,则[X]补 = 2+X=1.0101
数值零的补码表示形式是唯一的:[+0]补 = [-0]补 = 0.0000。可根据补码定义计算:
当X=-0.0000,[X]补=2+X=10.0000+0.0000=10.0000=0.0000 mod 2
例:X = +0.1011 Y = -0.1011
由此可见,正数的原码、反码、补码的表示形式相同(三码合一),而负数则各不相同。