数据表示和检验 原码、反码、补码、移码表示法

各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0、1表示,小数点则隐含表示不占位置。机器数对应的实际数值称为数的真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号位数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯正数;若约定小数点的位置在机器数的最高位之前(符号位之后),则是纯小数。

为了便于运算,带符号的机器数可采用原码、反码和补码等不同的编码方法。

**
正数的反码与原码相同,负数的反码则是其绝对值按位取反
正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1
二进制的小数点后面第一位正好表示的是2的-1次方,第二位是2的-2次方
**

原码表示法

原码表示法。数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则原码的定义如下:
X X X是纯整数,则
[ X ] 原 = { X 0 ≤ X ≤ 2 n − 1 − 1 2 n − 1 + ∣ X ∣ − ( 2 n − 1 − 1 ) ≤ X ≤ 0 [X]_原= \begin{cases} X & 0 \leq X \leq 2^{n-1}-1 \\ 2^{n-1}+|X| & -(2^{n-1}-1) \leq X \leq 0 \end{cases} [X]={X2n1+X0X2n11(2n11)X0
X X X是纯小数,则
[ X ] 原 = { X 0 ≤ X ≤ 1 2 0 + ∣ X ∣ − 1 < X ≤ 0 [X]_原= \begin{cases} X & 0 \leq X \leq 1 \\ 2^{0}+|X| & -1 < X \leq 0 \end{cases} [X]={X20+X0X11<X0
在原码表示法中,最高位是符号位,0表示正号,1表示负号,其余的 n − 1 n-1 n1位表示数值的绝对值。
数值0的原码表示有两种形式: [ + 0 ] 原 = 00000000 [ − 0 ] 原 = 10000000 [+0]_原=0 0000000 \\ [-0]_原=1 0000000 [+0]=00000000[0]=10000000

反码表示法

反码表示法。数值 X X X的反码记作 [ X ] 反 [X]_反 [X],如果机器字长为 n n n,则反码定义如下:
X X X是纯整数,则
[ X ] 反 = { X 0 ≤ X ≤ 2 n − 1 − 1 2 n − 1 + ∣ X ∣ − ( 2 n − 1 − 1 ) ≤ X ≤ 0 [X]_反= \begin{cases} X & 0 \leq X \leq 2^{n-1}-1 \\ 2^{n-1}+|X| & -(2^{n-1}-1) \leq X \leq 0 \end{cases} [X]={X2n1+X0X2n11(2n11)X0
X X X是纯小数,则
[ X ] 反 = { X 0 ≤ X ≤ 1 2 − 2 − ( n − 1 ) + X − 1 < X ≤ 0 [X]_反= \begin{cases} X & 0 \leq X \leq 1 \\ 2-2^{-(n-1)}+X & -1 < X \leq 0 \end{cases} [X]={X22(n1)+X0X11<X0
在反码表示法中,最高位是符号位,0表示证号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位取反。
数值0的反码表示有两种形式: [ + 0 ] 反 = 00000000 [ − 0 ] 反 = 11111111 [+0]_反=0 0000000 \\ [-0]_反=1 1111111 [+0]=00000000[0]=11111111

补码表示法

补码表示法。数值 X X X的补码记作 [ X ] 补 [X]_补 [X],如果机器字长为 n n n,则补码定义如下:
X X X是纯整数,则
[ X ] 补 = { X 0 ≤ X ≤ 2 n − 1 − 1 2 n + ∣ X ∣ − ( 2 n − 1 − 1 ) ≤ X ≤ 0 [X]_补= \begin{cases} X & 0 \leq X \leq 2^{n-1}-1 \\ 2^{n}+|X| & -(2^{n-1}-1) \leq X \leq 0 \end{cases} [X]={X2n+X0X2n11(2n11)X0
X X X是纯小数,则
[ X ] 补 = { X 0 ≤ X ≤ 1 2 + X − 1 < X ≤ 0 [X]_补= \begin{cases} X & 0 \leq X \leq 1 \\ 2+X & -1 < X \leq 0 \end{cases} [X]={X2+X0X11<X0
在补码表示法中,最高位为符号位,0表示正号,1表示符号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。在补码表示中,0有唯一的编码: [ + 0 ] 补 = 00000000 [ − 0 ] 补 = 00000000 [+0]_补=0 0000000 \\ [-0]_补=0 0000000 [+0]=00000000[0]=00000000

移码表示法

移码表示法是在数 X X X上增加一个偏移量来定义的,常用于浮点数中的阶码。如果机器字长为 n n n,规定偏移量为 2 n − 1 2^{n-1} 2n1,则移码定义如下:
X X X是纯整数,则
[ X ] 移 = 2 n − 1 + X ( − 2 n − 1 ≤ X < 2 n − 1 ) [X]_移=2^{n-1}+X(-2^{n-1} \leq X < 2^{n-1}) [X]=2n1+X(2n1X<2n1)
X X X是纯小数,则
[ X ] 移 = 1 + X ( − 1 ≤ X < 1 ) [X]_移=1+X(-1 \leq X < 1) [X]=1+X(1X<1)
实际上在偏移 2 n − 1 2^{n-1} 2n1的情况下,只要将补码的符号位取反即可获得相应的移码表示

所谓定点数,就是小数点位置固定不变的数。小数点的位置通常有两种约定方式:定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)

码制定点整数定点小数
原码 − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim +(2^{n-1}-1) (2n11)+(2n11) − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)}) (12(n1))+(12(n1))
反码 − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim +(2^{n-1}-1) (2n11)+(2n11) − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)}) (12(n1))+(12(n1))
补码 − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) 2n1+(2n11) − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) 1+(12(n1))
移码 − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) 2n1+(2n11) − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) 1+(12(n1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值