各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0、1表示,小数点则隐含表示不占位置。机器数对应的实际数值称为数的真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号位数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯正数;若约定小数点的位置在机器数的最高位之前(符号位之后),则是纯小数。
为了便于运算,带符号的机器数可采用原码、反码和补码等不同的编码方法。
**
正数的反码与原码相同,负数的反码则是其绝对值按位取反
正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1
二进制的小数点后面第一位正好表示的是2的-1次方,第二位是2的-2次方
**
原码表示法
原码表示法。数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则原码的定义如下:
若XXX是纯整数,则
[X]原={X0≤X≤2n−1−12n−1+∣X∣−(2n−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
若XXX是纯小数,则
[X]原={X0≤X≤120+∣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−1n-1n−1位表示数值的绝对值。
数值0的原码表示有两种形式:[+0]原=00000000[−0]原=10000000[+0]_原=0 0000000 \\ [-0]_原=1 0000000[+0]原=00000000[−0]原=10000000
反码表示法
反码表示法。数值XXX的反码记作[X]反[X]_反[X]反,如果机器字长为nnn,则反码定义如下:
若XXX是纯整数,则
[X]反={X0≤X≤2n−1−12n−1+∣X∣−(2n−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
若XXX是纯小数,则
[X]反={X0≤X≤12−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
补码表示法
补码表示法。数值XXX的补码记作[X]补[X]_补[X]补,如果机器字长为nnn,则补码定义如下:
若XXX是纯整数,则
[X]补={X0≤X≤2n−1−12n+∣X∣−(2n−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
若XXX是纯小数,则
[X]补={X0≤X≤12+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
移码表示法
移码表示法是在数XXX上增加一个偏移量来定义的,常用于浮点数中的阶码。如果机器字长为nnn,规定偏移量为2n−12^{n-1}2n−1,则移码定义如下:
若XXX是纯整数,则
[X]移=2n−1+X(−2n−1≤X<2n−1)[X]_移=2^{n-1}+X(-2^{n-1} \leq X < 2^{n-1})[X]移=2n−1+X(−2n−1≤X<2n−1)
若XXX是纯小数,则
[X]移=1+X(−1≤X<1)[X]_移=1+X(-1 \leq X < 1)[X]移=1+X(−1≤X<1)
实际上在偏移2n−12^{n-1}2n−1的情况下,只要将补码的符号位取反即可获得相应的移码表示
所谓定点数,就是小数点位置固定不变的数。小数点的位置通常有两种约定方式:定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)
码制 | 定点整数 | 定点小数 |
---|---|---|
原码 | −(2n−1−1)∼+(2n−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)) |
反码 | −(2n−1−1)∼+(2n−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)) |
补码 | −2n−1∼+(2n−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)) |
移码 | −2n−1∼+(2n−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)) |