胖蔡说技术
随便扯扯

计算机系统中的数据表示方法

各种数值在计算机中表示的方法称之为机器数,其特点是采用二进制,即使用数据0和1表示,小数点则隐含(不占位置)。机器数对应的实际数值称之为真值。

数的符号

根据机器数有无符号,我们可以将机器数分为:带符号数、无符号数。无符号数表示正数,在机器数中没有符号位。对于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位为机器数的符号位(正负符号),其余位则表示数值。为方便运算,带符号的机器数可采用原码、反码、补码等不同的编码方法,机器数的编码方法称为码制。码制的具体类型如下:

  • 原码
  • 反码
  • 补码
  • 移码

原码

原码即一个数值的二进制表示方式,原码的首位为符号位,0为正数,1为负数。根据其是否为小数,其表现形式如下所示:

1、若X为纯整数

$$[X]_原 = \begin{cases} X &\text 0\leq X\leq2^{n-1} – 1 \\ 2^{n-1} + |X| &\text -(2^{n-1} – 1)\leq X\leq0 \end{cases}$$

2、若X为纯小数

$$[X]_原 = \begin{cases} X &\text 0\leq X<1 \\ 2^0 + |X| &\text -1<X\leq0 \end{cases}$$

示例如下:

$$[+1]_原 = 0 0000001 $$ $$[+1]_原 = 0 0000001 $$ $$[+1]_原 = 0 0000001 $$ $$[+1]_原 = 0 0000001 $$ $$[+0.5]_原 = 0 \lozenge1000000 $$

反码

正数的反码是其本身(等于原码),负数的反码是符号位保持不变,其余位取反。若机器字节长为n,则反码定义如下:

  • X为纯整数
$$[X]_反 = \begin{cases} X &\text 0\leq X\leq2^{n-1} – 1 \\ 2^n – 1 + X &\text -(2^{n-1} – 1)\leq X\leq0 \end{cases}$$
  • X为纯小数
$$[X]_反 = \begin{cases} X &\text 0\leq X<1 \\ 2-2^{-(n-1)} + X &\text -1< X\leq0 \end{cases}$$

补码

正数的补码是其本身,负数的补码等于其反码 +1。若机器字节长为n,则补码定义如下:

  • X为纯整数
$$[X]_补 = \begin{cases} X &\text 0\leq X\leq2^{n-1} – 1 \\ 2^n+ X &\text -2^{n-1} \leq X\leq0 \end{cases}$$
  • X为纯小数
$$[X]_补 = \begin{cases} X & \text 0\leq X<1 \\ 2+ X & \text -1\leq X<0 \end{cases}$$

移码

移码(又叫增码或偏置码)通常用于表示浮点数的阶码,其表示形式与补码相似,只是其符号位用“1”表示正数,用“0”表示负数,数值部分与补码相同,即移码在补码的基础上,符号位取反。若机器字长为n,规定偏移为2n-1,则移码定义如下:

  • X为纯整数
$$[X]_移 = 2^{n-1} + X \quad (-2^{n-1} \leq X < 2^{n-1})$$
  • X为纯小数
$$[X]_补 = 1+ X \quad (-1 \leq X < 1)$$

赞(0) 打赏
转载请附上原文出处链接:胖蔡叨叨叨 » 计算机系统中的数据表示方法
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏