各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用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]原={X2n−1+∣X∣0≤X≤2n−1−1−(2n−1−1)≤X≤0
若
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+∣X∣0≤X≤1−1<X≤0
在原码表示法中,最高位是符号位,0表示正号,1表示负号,其余的
n
−
1
n-1
n−1位表示数值的绝对值。
数值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]反={X2n−1+∣X∣0≤X≤2n−1−1−(2n−1−1)≤X≤0
若
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]反={X2−2−(n−1)+X0≤X≤1−1<X≤0
在反码表示法中,最高位是符号位,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+∣X∣0≤X≤2n−1−1−(2n−1−1)≤X≤0
若
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+X0≤X≤1−1<X≤0
在补码表示法中,最高位为符号位,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}
2n−1,则移码定义如下:
若
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]移=2n−1+X(−2n−1≤X<2n−1)
若
X
X
X是纯小数,则
[
X
]
移
=
1
+
X
(
−
1
≤
X
<
1
)
[X]_移=1+X(-1 \leq X < 1)
[X]移=1+X(−1≤X<1)
实际上在偏移
2
n
−
1
2^{n-1}
2n−1的情况下,只要将补码的符号位取反即可获得相应的移码表示
所谓定点数,就是小数点位置固定不变的数。小数点的位置通常有两种约定方式:定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)
码制 | 定点整数 | 定点小数 |
---|---|---|
原码 | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim +(2^{n-1}-1) −(2n−1−1)∼+(2n−1−1) | − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)}) −(1−2−(n−1))∼+(1−2−(n−1)) |
反码 | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim +(2^{n-1}-1) −(2n−1−1)∼+(2n−1−1) | − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)}) −(1−2−(n−1))∼+(1−2−(n−1)) |
补码 | − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) −2n−1∼+(2n−1−1) | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) −1∼+(1−2−(n−1)) |
移码 | − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) −2n−1∼+(2n−1−1) | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) −1∼+(1−2−(n−1)) |