原码
数值 X 的原码记为 [X]原,如果机器字长为 n (即采用 n 个二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,基余的 n~1 位表示数值的绝对值。数值零的原码表示有两种形式:[+0]原=00000000,[-0]原=10000000。
例:
[+4]原 = 00000100
[-4]原 = 10000100
[+127]原 = 01111111
[-127]原 = 11111111
反码
数值 X 的反码记作 [X]反,如果机器字长为 n,则最高位是符号位,0 表示正号,1 表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位求反。数值0的反码表示有两种形式:[+0]反=00000000,[-0]反=11111111。
例:
[+4]反 = 00000100
[-4]反 = 11111011
[+127]反 = 01111111
[-127]反 = 10000000
补码
数值 X 的补码记作 [X]补,如果机器字长为 n,则最高为符号位,0 表示正号,1 表示负号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加 1。在补码表示中,0 有唯一的编码:[+0]补=00000000, [-0]补=00000000。
例:
[+4]补 = 00000100
[-4]补 = 11111100
[+127]补 = 01111111
[-127]补 = 10000001
移码
在数 X 上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为 n,在偏移2^(n-1)的情况下,只要将补码的符号位取反便可获相应的移码。
例:
[+0]移 = 10000000
[-0]移 = 10000000
[+4]移 = 10000100
[-4]移 = 01111100
[+127]移 = 11111111
[-127]移 = 00000001
总结:原码、反码、补码中最高位 0 表示正数,1 表示负数。负数的反码规则是符号位不变,绝对值位按位取反。负数的补码规则是符号位不变,绝对值位按位取反然后再加1。