数据是计算机处理和加工的基本单位和对象。在计算机中数据分为无符号数(绝对值)和有符号数(真值)。其中带符号数根据编码分为原码、反码、补码、移码。
计算机中数据的表示最基本的为二进制(B)、十进制(D)、八进制(Q)、十六进制(H),其具体转化是基于位来进行的,也就是“满十进一,满二进一”等。具体转化的简单记忆方法可以参考我的博客:进制转换详解
一、无符号数和带符号数
所谓的无符号数就是数据的所有位均为数值位(没有符号位),类似于绝对值。以下例子:
X1 = 01001 表示无符号9; X2 = 11001 表示无符号数25.
机器字长是n+1的无符号位的表示范围为0-(2^(n+1)-1),此时的二进制最高位为数值位,其权值为2^n。
当涉及到正负数时,就需要用到我们的带符号数。所谓的带符号数就是在二进制的最高位约定为符号位:“0表示正,1表示负”。
再回到上面的例子中:
X1 = 01001 表示有符号+9;
X2 = 11001 表示符号数-9.
因为计算机CPU的运算器中只有加法器,要把减法转化成加法来计算.。引入原码 反码 和补码的目的就是为了解决减法问题,
1.1原码表示法:
若真值为纯小数:原码形式为Xs.X1X2X3…,其中Xs表示符号位,具体如下:
若真值为纯整数,其原码形式XsX1X2X3…,具体如图所示:
原码的优点是直观易懂,机器数与真值之间简单转化。用原码实现算术乘除运算很简单,缺点是实现加减运算复杂。
在原码中,真值0有两种表示方法:
[+0]原 = 00000;
[-0]原 = 10000;
1.2 补码的表示法:
小数形式反码: