进制数及其转换(二进制,十进制,十六进制)

数值数据是表示数量大小的数据,有多种表示方法。日常生活中一般采用十进制数进行计数和计算,但十进制数难以在计算机内直接存储与运算。在计算机系统中,通常将十进制数作为人机交互的媒介,而数据则以二进制数的形式存储和运算。

计算机采用二进制的主要原因有以下几点:

(1)易于物理实现

二进制在技术上最容易实现。这是因为具有两种稳定状态的物理器件很多,如门电路的导通与截止、电压的高与低等,而它们恰好可以对应表示“1”和“0”这两个数码。假如采用十进制,那么就要制造具有10种稳定状态的物理电路,而这是非常困难的。

 

(2)运算规则简单

数学推导已经证明,对R进制数进行算术求和或求积运算,其运算规则各有R(R+1)/2种。如采用十进制,则R=10,就有55种求和或求积的运算规则;而采用二进制,则R=2,仅有3种求和或求积的运算规则,

以加法为例:0+0=0,0+1=1 (1+0=1),1+1=10,因而可以大大简化运算器等物理器件的设计。

(3)机器可靠性高

由于电压的高和低、电流的有和无等都是一种质的变化,两种物理状态稳定、分明,因此,二进制码传输的抗干扰能力强,鉴别信息的可靠性高。

(4)逻辑判断方便

采用二进制后,仅有的两个符号“1”和“0”正好可以与逻辑命题的两个值“真”和“假”相对应,能够方便地使用逻辑代数这一有力工具来分析和设计计算机的逻辑电路。

但是,用二进制表示一个数,其所使用的位数要比用十进制表示长得多,书写和阅读都不方便,也不容易理解。为了书写和阅读的方便,人们通常使用十六进制来弥补二进制的这一不足。

1. 进位计数制

在人类的生产和生活中,经常要遇到数的表示问题,人们通常采用从低位向高位进位的方式来进行计数,这种表示数据的方法称为进位计数制。讨论进位计数制要涉及到两个基本概念:基数(Radix)和权(Weight)。

1)十进制

在进位计数制中,每个数位所用到的数码符号的个数叫做基数。十进制是人们最熟悉的一种进位计数制,每个数位允许选用0~9共10个不同数码中的某一个,因此十进制的基数为10。每个数位计满10就向高位进位,即“逢10进1”。

在一个数中,数码在不同的数位上所表示的数值是不同的。每个数码所表示的数值就等于该数码本身乘以一个与它所在数位有关的常数,这个常数叫做权。例如:十进制数6543.21,数码“6”所在数位的权为1000,这一位所代表的数值即为6×103=6000,“5”所在数位的权为100,这一位所代表的数值即为5×102=500,……。

2)二进制

计算机中信息的存储、处理和传送采用的都是二进制,不论是指令还是数据,或是多媒体信息(声音、图形、图像等),都必须采用二进制编码形式才能存入计算机中。

 

二进制是一种最简单的进位计数制,它只有两个不同的数码:“0”和“1”,即基数为2,逢2进1。任意数位的权是2i

3)十六进制

十六进制数的基数为16,逢16进1,每个数位可取0,1,…,9,A,B,…,F共16个不同的数码和符号中的任意一个,其中A~F分别表示十进制数值10~15。

既然有不同的进位计数制,那么在给出一个数的同时,就必须指明它是哪种进制的数,例如:(1010)2、(1010)10、(1010)16 所代表的数值完全不同,如果不用下标加以标注,就会产生歧义。除了用下标表示之外,还可以用后缀字母来表示不同的数制,后缀B表示该数是二进制(Binary)数,后缀H表示该数是十六进制(Hexadecimal)数,而后缀D表示该数是十进制(Decimal)数。十进制数在书写时可以省略后缀D,其他进制数在书写时一般不能省略后缀。例如:有3个数分别为375D、101B和AFEH,从后缀字母就可以知道它们分别是十进制数、二进制数和十六进制数。

2. 各种进制数之间的转换

1)二进制数转换为十六进制数

将一个二进制数转换成十六进制数的方法是将二进制数的整数部分和小数部分分别进行转换,即以小数点为界,整数部分从小数点开始往左数,每4位分成一组,当最左边的数不足4位时,可根据需要在数的最左边添加若干个“0”以补足4位;对于小数部分,从小数点开始往右数,每4位分成一组,当最右边的数不足4位时,可根据需要在数的最右边添加若干个“0”以补足4位,最终使二进制数的总的位数是4的倍数,然后用相应的十六进制数取而代之。

例如:

111011.1010011011B = 0011 1011.1010 0110 1100B = 3B.A6CH

2)十六进制数转换为二进制数

要将十六进制数转换成二进制数,只要将1位十六进制数写成4位二进制数,然后将整数部分最左边的“0”和小数部分最右边的“0”去掉即可。

例如:

3B.328H = 0011 1011.0011 0010 1000B = 111011.001100101B

3)二进制数转换为十进制数

要将一个二进制数转换成十进制数,只要把二进制数的各位数码与它们的权相乘,再把乘积相加,就得到对应的十进制数,这种方法称为按权展开相加法。

例如:

100011.1011B = 1×25 + 1×21 + 1×20 + 1×2-1 + 1×2-3 + 1×2-4= 35.6875D

4)十进制数转换为二进制数

要将一个十进制数转换成二进制数,通常采用的方法是基数乘除法。这种转换方法是对十进制数的整数部分和小数部分分别进行处理,整数部分用除基取余法,小数部分用乘基取整法,最后将它们拼接起来即可。

(1)十进制整数转换为二进制整数(除基取余法)

十进制整数转换为二进制整数的规则是:除以基数(2)取余数,先得到的余数为低位,后得到的余数为高位。

具体的做法是:用2连续去除十进制整数,直到商等于0为止,然后按逆序排列每次的余数(先取得的余数为低位),便得到与该十进制数相对应的二进制数各位的数值。

例如,将175D转换成二进制数:

所以,175D=10101111B

(2)十进制小数转换为二进制小数(乘基取整法)

十进制小数转换为二进制小数的规则是:乘以基数(2)取整数,先得到的整数为高位,后得到的整数为低位。

具体的做法是:用2连续去乘十进制数的小数部分,直至乘积的小数部分等于0为止,然后按顺序排列每次乘积的整数部分(先取得的整数为高位),便得到与该十进制数相对应的二进制数各位的数值。

例如,将0.3125D转换成二进制数:

0.3125×2 = 0.625       … 整数0       (高位)

0.625×2  = 1.25        … 整数1

0.25×2   = 0.5         … 整数0

0.5×2    = 1.0         … 整数1       (低位)

所以,0.3125D = 0.0101B

若要将十进制数175.3125转换成二进制数,应对整数部分和小数部分分别进行转换,然后再进行整合:

175.3125D=10101111.0101B

需要注意的是,十进制小数常常不能准确地换算为等值的二进制小数,存在有一定的换算误差。

例如,将0.5627D转换成二进制数:

0.5627×2 = 1.1254

0.1254×2 = 0.2508

0.2508×2 = 0.5016

0.5016×2 = 1.0032

0.0032×2 = 0.0064

0.0064×2 = 0.0128

……

由于小数位始终达不到0,因此这个过程会不断进行下去。通常的做法是:根据精度要求,截取一定的数位,其误差值小于截取的最低一位数的权。

当要求二进制数取m位小数时,一般可求m+1位,然后对最低位作“0舍1入”处理。

例如:

0.5627D = 0.100100…B

若取精度为5位,则由于小数点后第6位为“0”,被舍去,所以:

0.5627D = 0.10010B



转载自:http://share.onlinesjtu.com/mod/tab/view.php?id=172

你可能感兴趣的:(OS)