数的机器码表示
文章目录
为了妥善的处理数据运算过程中符号位的问题,于是就产生了 把符号位和数值位一起编码起来 表示相应的数的各种表示方法。例如我们熟悉的原码、反码、补码、移码等。通常将未经 编码的数称为真值,编码后的数称为 机器数或者机器码。
-
真值的形式:正、负号加某进制数绝对值的形式,即数的实际值。如
+3
,-5
等 -
机器数的形式:真值按某种编码方式进行编码后的数值,即真值在机器中的表示,称为机器数,一般可以分为 无符号数和有符号数两种如:X=01011 ,Y=11011
原码
定点整数
若定点整数的原码形式位 x n x n − 1 ⋅ ⋅ ⋅ x 1 x 0 x_n x_{n-1}\cdot\cdot\cdot x_1x_0 xnxn−1⋅⋅⋅x1x0,其中 x n x_n xn为符号位,则原码表示的定义为:
x [ 原 ] = { x 0 ⩽ x < 2 n 2 n − x = 2 n + ∣ x ∣ − 2 n < x ⩽ 0 x_{[原]}=\left\{\begin{matrix} x & 0 \leqslant x<2^n \\ 2^n-x=2^n+|x| & -2^n<x\leqslant0 \end{matrix}\right. x[原]={
x2n−x=2n+∣x∣0⩽x<2n−2n<x⩽0
在上式中,x代表的是真值。
例如, x = + 7 x=+7 x=+7,化为二进制表示为 x = + 0111 x=+0111 x=+0111; x [ 原 ] = 0111 x_{[原]}=0111 x[原]=0111。
x = − 7 x=-7 x=−7,化为二进制表示为 x = − 0111 x=-0111 x=−0111; x [ 原 ] = 2 3 − ( − 0111 ) = 1000 + 0111 = 1111 x_{[原]}=2^3-(-0111)=1000+0111=1111 x[原]=23−(−0111)=1000+0111=1111。
我们可以总结出来:
-
对于正数 x = + x n − 1 . . . x 1 x 0 x=+x_{n-1}...x_1x_0 x=+xn−1...x1x0,它的原码是它自己本身,常常在最高位前面补0,代表它是一个正数。
- x [ 原 ] = 0 x n − 1 . . . x 1 x 0 x_{[原]}=0x_{n-1}...x_1x_0 x[原]=0xn−1...x1x0
-
对于0,根据原码的定义则有两种表示形式:
- + 0 = + 0 n − 1 . . . 0 1 0 0 +0=+0_{n-1}...0_10_0 +0=+0n−1...0100
- 此时正0的原码为 + 0 [ 原 ] = 0 0 n − 1 . . . 0 1 0 0 +0_{[原]}=00_{n-1}...0_10_0 +0[原]=00n−1...0100
- − 0 = − 0 n − 1 . . . 0 1 0 0 -0=-0_{n-1}...0_10_0 −0=−0n−1...0100
- 此时负0的原码为 − 0 [ 原 ] = 1 0 n − 1 . . . 0 1 0 0 -0_{[原]}=10_{n-1}...0_10_0 −0[原]=10n−1...0100
- + 0 = + 0 n − 1 . . . 0 1 0 0 +0=+0_{n-1}...0_10_0 +0=+0n−1...0100
-
对于负数 x = − x n − 1 . . . x 1 x 0 x=-x_{n-1}...x_1x_0 x=−xn−1...x1x0,它的原码是在最高位前面补1,代表它是一个负数。
- x [ 原 ] = − x n − 1 . . . x 1 x 0 x_{[原]}=-x_{n-1}...x_1x_0 x[原]=−xn−1...x1x0
对于一个定点整数原码 x n x n − 1 . . . x 1 x 0 x_nx_{n-1}...x_1x_0 xnxn−1...x1x0,最高位 x n x_n xn代表符号位,用0来表示正数,用1来表示负数。而 x n − 1 . . . x 1 x 0 x_{n-1}...x_1x_0 xn−1...x1x0则代表的是数值位。它的大小就是该原码对应真值的绝对值。
我们很容易求出它的范围 [ − ( 2 n − 1 ) , 2 n − 1 ] [-(2^n-1),2^n-1] [−(2n−1),2n−1]
定点小数
假设定点小数的原码形式为 x s . x 1 x 2 . . . x n x_s.x_1x_2...x_n xs.x1x2...xn(实际上小数点是不存储的),其中 x s x_s xs代表符号位。则原码的定义为:
x [ 原 ] = { x 0 ⩽ x < 1 1 − x = 1 + ∣ x ∣ − 1 < x ⩽ 0 x_{[原]}=\left\{\begin{matrix}x & 0 \leqslant x<1 \\ 1-x=1+|x| & -1<x\leqslant0\end{matrix}\right. x[原]