各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0和1表示。小数点则隐含,表示不占位置。机器数对应的实际数值称为数的真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位是表示正、负的符号位,其余数则表示数值。
为了方便运算,带符号的机器数可采用原码、反码和补码等不同的编码方法,机器数的这些编码方法称为码制。
原码
数值X的原码记为[X]原,如果机器字长为n,则原码的定义如下
若X是纯整数,则
[
X
]
原
=
{
X
,
0
≤
X
≤
2
n
−
1
−
1
2
n
−
1
+
∣
X
∣
,
-
(
2
n
−
1
)
−
1
≤
X
≤
0
[X]~原~=\begin{cases} X, & \text0≤X≤2^{n-1}-1 \\ 2^{n-1}+|X|, & \text-(2^{n-1})-1≤X≤0 \end{cases}
[X] 原 ={X,2n−1+∣X∣,0≤X≤2n−1−1-(2n−1)−1≤X≤0
若X是纯小数,则
[
X
]
原
=
{
X
,
0
≤
X
≤
1
2
0
+
∣
X
∣
,
-
1
≤
X
≤
0
[X]~原~=\begin{cases} X, & \text0≤X≤1 \\ 2^0+|X|, & \text-1≤X≤0 \end{cases}
[X] 原 ={X,20+∣X∣,0≤X≤1-1≤X≤0
比如,机器字长n等于8:
[+1]原=0 0000001 [+1]原=1 0000001
[+127]原=0 1111111 [+127]原=1 1111111
[+45]原=0 0101101 [+45]原=1 0101101
[+0.5]原=0 ◇1000000 [+0.5]原=1 ◇1000000
在原码表示法中,最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。数值0的原码有两种表示方式:[+0]原=0 0000000,[-0]原=1 0000000。
反码
数值X的反码记为[X]反,如果机器字长为n,则反码的定义如下
若X是纯整数,则
[
X
]
反
=
{
X
,
0
≤
X
≤
2
n
−
1
−
1
2
n
−
1
+
X
,
-
(
2
n
−
1
)
−
1
≤
X
≤
0
[X]~反~=\begin{cases} X, & \text0≤X≤2^{n-1}-1 \\ 2^{n-1}+X, & \text-(2^{n-1})-1≤X≤0 \end{cases}
[X] 反 ={X,2n−1+X,0≤X≤2n−1−1-(2n−1)−1≤X≤0
若X是纯小数,则
[
X
]
反
=
{
X
,
0
≤
X
<
1
2
−
2
n
−
1
+
X
,
-
1
<
X
≤
0
[X]~反~=\begin{cases} X, & \text0≤X<1 \\ 2-2^{n-1}+X, & \text-1<X≤0 \end{cases}
[X] 反 ={X,2−2n−1+X,0≤X<1-1<X≤0
比如,机器字长n等于8:
[+1]反=0 0000001 [+1]反=1 1111110
[+127]反=0 1111111 [+127]反=1 0000000
[+45]反=0 0101101 [+45]反=1 1010010
[+0.5]反=0 ◇1000000 [+0.5]反=1 ◇0111111
在反码表示法中,最高位是符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位取反。数值0的原码有两种表示方式:[+0]反=0 0000000,[-0]反=1 1111111。
补码
数值X的补码记为[X]补,如果机器字长为n,则补码的定义如下
若X是纯整数,则
[
X
]
补
=
{
X
,
0
≤
X
≤
2
n
−
1
−
1
2
n
+
X
,
-
2
n
−
1
≤
X
≤
0
[X]~补~=\begin{cases} X, & \text0≤X≤2^{n-1}-1 \\ 2^{n}+X, & \text-2^{n-1}≤X≤0 \end{cases}
[X] 补 ={X,2n+X,0≤X≤2n−1−1-2n−1≤X≤0
若X是纯小数,则
[
X
]
补
=
{
X
,
0
≤
X
<
1
2
+
X
,
-
1
≤
X
<
0
[X]~补~=\begin{cases} X, & \text0≤X<1 \\ 2+X, & \text-1≤X<0 \end{cases}
[X] 补 ={X,2+X,0≤X<1-1≤X<0
比如,机器字长n等于8:
[+1]补=0 0000001 [+1]补=1 1111111
[+127]补=0 1111111 [+127]补=1 0000001
[+45]补=0 0101101 [+45]补=1 1010011
[+0.5]补=0 ◇1000000 [+0.5]补=1 ◇1000000
在补码表示法中,最高位是符号位,0表示正号,1表示负号,正数的补码与原码和反码相同,负数的补码则等于其反码的末位加1。数值0的补码有唯一的编码:[+0]补=0 0000000,[-0]补=0 0000000。
移码
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,规定偏移量为2n-1,z则移码的定义如下
若X是纯整数,则[X]移=2n-1+X;(-2n-1≤X<2n-1)
若X是纯小数,则[X]移=1+X;(-1≤X<1)
比如,机器字长n等于8:
[+1]移=1 0000001 [+1]移=101111111
[+127]移=1 1111111 [+127]移=0 0000001
[+45]移=1 0101101 [+45]移=0 1010011
[+0.5]移=1 ◇0000000 [+0.5]移=1 ◇0000000
实际上,在偏移2n-1的情况下,只要将补码的符号位取反便可获得相应的移码