2.1.3 计算机中的数据表示

在计算机中,数据都是以二进制的形式存在的(即都是以0和1组成的各种编码)。 而在计算机中之所以使用二进制,主要考虑了以下两点:

  • 计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用‘1’和‘0’来表示;
  • 二进制运算规则简单,则其运算器的结构也较为简单,有利于提高运算速度;                                   
1.进制转换

计算机中使用的是二进制,但现实生活中,人们使用的更多的是十进制。所以在计算机输出时,一般需要把二进制转换成十进制或其他进制。目前,人们常用的除二进制和十进制外,还有八进制和十六进制。

(1)数制的概念

数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。数制中比较重要的概念包括数码、基数和位权,下面分别介绍如下:

  • 数码,数制中表示基本数值大小的不同符号字符。比如,十进制有10个数码:0、1、2、3、4、5、6、7、8、9;
  • 基数,数制所使用的数码的个数。比如,十进制的基数为10;
  • 位权,数制中某一位上的1所表示数值的大小(可以理解为所处位置的价值)

比如:十进制的847.36,其中的8所处位置的位权是100,其中的4所处位置的位权是10,其中的7所处位置的位权是1, 其中的3所处位置的位权是0.1,其中的6所处位置的位权是0.01;

一般而言,我们可以用公式来表示某一个数值。任意一个R进制的数D可以表示为:

其中,R为基数,即“逢R进一”;i为位数,即在数值中的第几位(整数的最后一位是0位数,向左依次加1,向右,小数点后面的依次减1);Ki为第i位上的数码(其值为0至K-1中的任一个);Ri为第i位的位权。m和n为最低位和最高位的位数。举上个例子847.36,用该公式可以写成:    

需要说明的是此数值中  8的位数为2;位权为102;

4的位数为1;位权为101;

7的位数为0;位权为100;

3的位数为-1;位权为10-1;

6的位数为-2;位权为10-2;

常用进制的各个要素如下表:

      数制

基数

数码

位权

进位规则

简要表示

     二 进 制

2

0,1

2i

逢二进一

(Binary)    B或2

      八进制

8

0,1,2,3,4,5,6,7,

8i

逢八进一

(Octal)     O或8   

     十进制

10

0,1,2,3,4,5,6,7,8,9,

10i

逢十进一

(Decimal)   D或10

    十六进制

16

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

16i

逢十六进一

(Hexadecimal)  H或16

表2.1.14

例如:(5264)8 或5264O 表示的是一个八进制数;

      (1ABC)16或1ABCH 表示的是一个十六进制数;

需要说明的是,十六进制比较特殊,它的数码中除了数字(0~9)外,还包含了6个英文字母(A~F)

(2)二进制和十进制的互换

各种数制之间是可以相互转换的,比如(110)2的二进制数,转换成十进制的数就是6。下面主要介绍二进制与十进制之间的转换方法,其他进制与十进制的转换方法类似。

<1>二进制转换为十进制

二进制转换为十进制,就是按公式展开,

 (其中R为2)。

比如:

<2>十进制转换为二进制

将十进制转换为二进制时,需要先分成整数部分和小数部分,然后分别转换。

  • 整数部分,把整数部分除2,得出商和余数,然后对商除2,又得出商和余数,继续对商除2,直至商为0。最后将按顺序得出的余数逆序排列,此排列数就是转换后的二进制数据。

比如:整数13,转换二进制的过程如下:

步骤

整数或商除2

余数

1

13÷2

6

1

2

6÷2

3

0

3

3÷2

1

1

4

1÷2

0

1

表2.1.15

按步骤顺序得出的余数,逆序排列得出 1101,此即为转换后的二进制数。

  • 小数部分,把小数部分乘2,得出一个数据,分别取该数据的整数部分和小数部分。在对小数部分乘2,得出数据后,分别取出整数部分和小数部分。继续对小数部分乘2,直至取到的小数部分为0。最后将按顺序得到的整数部分排列,此排列数就是转换后的二进制数据。

比如:小数0.25,转换二进制的过程如下:

步骤

小数部分乘2

结果中的整数部分

结果中的小数部分

1

0.25×2

0

0.5

2

0.5×2

1

0

表2.1.16

按步骤顺序取出整数部分排列01,0.01即为转换后的二进制数。

综上,十进制数13.25的二进制表示为(1101.01)2

2.数据表示

我们知道,在计算机中的数据是用二进制来表示的。但现实中的正数和负数的概念又是在如何在计算机中表示的呢。其实,计算机中的数据分为无符号数和有符号数两种。

(1)无符号数

所谓的无符号数,其实就是在计算机中的二进制表示中没有符号位。每一位数码都表示数值本身。比如二进制(11010)2表示的十进制就是26。

(2)有符号数

在现实中,我们通常用”+”表示是正数,用字符”-”来表示负数。比如-123、+456.8(当然现实中的”+”在表示正数时,一般会省略掉)。但是在计算机中,数的正负标识(+、-)是无法直接识别的,所以在计算机中一般会使用0和1来代表正负(0代表正数,1代表负数)。此时在表示有符号的数值时,则需要一个符号位来表示正负。比如(011010)2表示的十进制数为+26.其在计算机内部表示如下图,最高位是一个符号位。

                       

                                                   图2.1.12 有符号数的表示

一般的,我们把用”+”和”-”符号表示正负的数据,称为真值(比如+11010,就是一个真值)。相对应的,我们把在计算机中用0和1来代替正负表示的二进制数据称为机器数(比如0,11010,就是一个机器数,最左边的0代表符号位)。而机器数又根据编码规则不同,可以分为原码、反码、补码和移码等。介绍如下:

原码

机器数中最简单的编码方式,符号位0表示正数,1表示负数。比如:

正的二进制数11010的原码表示为0,11010(其中逗号左边表示符号位,右边表示数值位

负的二进制数11010的原码表示为1,11010

反码

正数的反码与其原码相同。负数的反码是其原码除符号位外,其余各数值位取反(所谓的取反,就是1变成0,而0变成1).比如:

正的二进制数11010的反码表示为0,11010

负的二进制数11010的反码表示为1,00101

补码

正数的补码与其原码相同。负数的补码是在其反码的数值位的最低位+1。比如:

正的二进制数11010的补码表示为0,11010

负的二进制数11010的补码表示为 (1,00101)反码+1= 1,00110

移码/

偏移码

无论正负数,移码就是将其补码的符号位取反。比如:

正的二进制数11010的移码表示为1,11010

负的二进制数11010的移码表示为0,00110

总结:

  • 正数的原码、反码、补码都是一样;
  • 负数的原码、反码、补码的符号位都是1,其数值位存在以下关系:反码是原码取反;补码是反码+1;
  • 正负数的移码都是其补码的符号位取反。

表2.1.17

3.定点数与浮点数

在计算机中,并没有专门的器件来表示小数点。针对非整数的情况,有两种方法来表示小数点的存在,即定点表示和浮点表示。定点表示的数称为定点数,浮点表示的数则被称为浮点数。

(1)定点数

定点数就是约定小数点固定在某一位置上的数。一般有两种约定:一种是约定小数点在符号位之后,最高数值位之前,用这种方法表示的数据为纯小数;一种是约定小数点在最低数值位之后,用这种方法表示的数据为纯整数。采用定点数的机器称为定点机。

                                   图2.1.13 定点数的表示方法

在定点机中,当处理的数既不是纯小数或纯整数的时候,需乘上一个比例因子。

(2)浮点数

一般情况下,计算机处理的数据既不是纯小数,也不是纯整数,所以用定点方法表示是非常不方便的。而此时用浮点法表示,则会比较容易实现。所谓的浮点法就是小数点的位置不是固定的,而是根据情况可以发生浮动变化的。浮点数的表示形式如下图所示:

                

                                               图2.1.14 浮点数的表示方法

浮点数有两部分组成,阶码和尾数。阶码是纯整数,由符号位和数值位来反映浮点数的表示范围和小数点的实际位置;尾数是纯小数,其数值位反映了浮点数的精度,符号位代表了浮点数的正负。假设浮点数总位数为16位。阶码8位(含符号位1位),位数8位(含符号位一位),如下图所示:

 

                                              图2.1.15 浮点数的表示示例

该图所代表的数值为+0.0011010  × 2 -0001101 ,转化为十进制就是+0.203125 × 2-13。由此可见,阶码决定了2的多少次冪次方。一旦浮点数的总位数确定,那么如何分配阶码和尾数的位数,则直接影响浮点数的表示范围和精度。

为了提高浮点数的精度,浮点数的尾数必须是规格化数(所谓的规格化数,就是尾数中的数值位的最高位必须为有效数字,即必须为1)。如果不是规格化数,则要通过修改阶码并同时左右移尾数的办法,使其变成规划化数。而这个过程就称为浮点数的规格化。比如:二进制数0.0000101可以表示为0.000101×2-001,也可以表示为0.0101×2-110,当然也可以表示为0.101×2-111;而这其中只有0.101×2-111是规格化的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值