关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 浅析进制转换在计算机应用中的技巧

浅析进制转换在计算机应用中的技巧

作者:时间:2012-10-19来源:网络收藏

1、二进制的使用意义

本文引用地址:http://www.eepw.com.cn/article/202139.htm

一种新处置器的盛行,离不开响应软件的支撑。开拓新的处置器能够会由于落空响应软件的支撑而影响其推行使用和市场前景;另一方面,得不到普遍使用和必然市场份额的处置器也很可贵到丰厚的软件支撑。这种处置器和支撑软件之间互相钳制的关系,既使得新处置器的设计不得不思索兼容老处置器,也障碍了新处置器的推出。在这种状况下,研讨若何把支撑老处置器的软件移植到新的处置器上,使新的处置器从降生之初就有丰厚的软件,不只对软件重用有严重意义,更可以坦荡处置器研发的思绪,促进新处置器的立异。

2、二进制在核算机使用中转换经常见的办法

普通有三种办法可以把老处置器上的代码移植到新处置器上:

(1)在新处置器上供应专门的运转形式来执行老代码,如英特尔的安腾(Itanium)处置器专门设计了执行x86代码的硬件。

(2)把源顺序从新编译到新的指令集。

(3)运用软件办法,分析或翻译使用顺序。

第一种办法,明显无法应用新处置器的一些进步前辈特征,落空了开拓新处置器的意义,而且添加了新处置器的硬件复杂度,甚至还会影响原有代码的执行效率;第二种办法可以到达很好的效率,但并不老是可行,由于有些顺序曾经没有源代码,有些顺序依靠于共享代码库,而这些共享代码以目的代码方式呈现,纷歧定能获得源码,有些源顺序言语没有编译到新指令集的编译器,此外操作系统的差别还能够使得只要修正源代码才干从新编译这些例程(比方与图形相关的代码)。

因而第三种办法,称之为二进制翻译(Binary Translation)应运而生。它是一种直接翻译可执行二进制顺序的技能,可以把一种处置器上的二进制顺序翻译到别的一种处置器上执行。它使得分歧处置器之间的二进制顺序可以很轻易地互相移植,扩展了硬件/软件的合用局限,有助于打破前面提到的处置器和支撑软件之间相互掣肘影响立异的场面。二进制翻译也是一种编译技能,它与传统编译的差异在于其编译处置对象分歧。传统编译处置的对象是某一种高级言语,经由编译处置生成某种机械的目的代码;二进制翻译处置的对象是某种机械的二进制代码,该二进制代码是经由传统编译生成的,经由二进制翻译处置后生成另一种机械的二进制代码。依照传统编译顺序前端、中端和后端的划分,我们可以了解为二进制翻译是拥有非凡前端的编译器。因而,更快且有用的进行就成为很主要的工作。

3、进制之间的互相转换技巧

3.1 二为十进制

(1)二为十进制的传统办法—“按权睁开”法

由二进制数转换成十进制数的根本做法是,把二进制数起首写成加权系数睁开式,然后按十进制加律例则乞降。这种做法称为“按权睁开”法。

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

例如,设有一个二进制数:01100100,转换为十进制数为:

下面是竖式:

01100 100 换算成 十进制

(01100 100)B=(100)D

注:B透露表现二进制,O透露表现八进制,D透露表现十进制,H透露表现十六进制。

(2)二进制转换为十进制的技巧办法—“直接相加”算法。

依据进制转化的道理可知,二进制转化为十进制时,都与2的次方数有关,即从低位到高位顺次为1、2、4、8、16、32、64……,1的位数有用,0的位数无效,如许就可以依据二进制对应的位数直接算加法。

例:将上面的二进制数:0110 0100,转换为10进制为:

后果直接算加法:64+32+4=100

即(01100 100)B=(100)D

3.2 十进制转换为二进制

3.2.1 十进制转换为二进制的传统办法—“除2取余”法

十进制数转换为二进制数时,因为整数和小数的转换办法分歧,所以先将十进制数的整数局部和小数局部辨别转换后,再加以兼并。十进制整数转换为二进制整数采用“除2取余,逆序陈列”法。详细做法是:用2去除十进制整数,可以获得一个商和余数;再用2去除商,又会获得一个商和余数,如斯进行,直到商为零时为止,然后把先获得的余数作为二进制数的低位有用位,后获得的余数作为二进制数的高位有用位,顺次陈列起来。 十进制小数转换成二进制小数采用“乘2取整,挨次陈列”法。详细做法是:用2乘十进制小数,可以获得积,将积的整数局部掏出,再用2乘余下的小数局部,又获得一个积,再将积的整数局部掏出,如斯进行,直到积中的小数局部为零,或许到达所要求的精度为止。然后把掏出的整数局部按挨次陈列起来,先取的整数作为二进制小数的高位有用位,后取的整数作为低位有用位。

例:将十进制数302.25转换为二进制数

(1)整数局部:

302/2=151余0

151/2=75余1

75/2=37余1

37/2=18余1

18/2=9余0

9/2=4余1

4/2=2余0

2/2=1 余0

1/2=0余1

(302)D=(100101110)B

(2)小数局部:

0.25

X 2

_______________

0.50 (整数局部0为高位)

X 2

_______________

1.00 (整数局部1为低位)

(0.25)D=(0.01)B

故(302.25)D=(100101110.01)B

3.2.2 十进制转换为二进制的技巧办法—因式分化法

依据进制转化的道理可知,十进制转化为二进制时,都与2的次方数有关,即从低位到高位顺次为1、2、4、8、16、32、64……,1的位数有用,0的位数无效,如许就可以依据二进制对应的位数按上面的数进行因式分化。

将十进制数302.25转换为二进制数

(1)整数局部:

即:(302.25)D=(100101110)B

(2)小数局部:

整数的转换是准确的,小数的转换能够呈现无量小数或轮回小数的状况。此时需求进行舍入处置以截断,所以小数的转换能够略有偏向。用上例办法获得(0.25)D=(0.01)B

故(302.25)D=(100101110.01)B

3.3 八进制与二进制的转换

因为81=23,阐明八进制的一位对应二进制的三位

(1)将八进制转换为二进制:

例:将八进制的37.416转换成二进制数:

(2)将二进制转换为八进制:

例:将二进制的10110.0011转换成八进制:

3.4 十六进制与二进制的转换

因为161=24,阐明十六进制的一位对应二进制的四位

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

例:将十六进制数5DF.9 转换成二进制:

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

例:将二进制数1100001.111 转换成十六进制:

3.5 十进制与八进制、十六进制的转换

将十进制转换为八进制、十六进制首要经过二进制造为桥梁进行转换,办法同上。

即:十进制←→二进制←→八进制;十进制←→二进制←→十六进制。

总之,进制在核算机信息技能中使用普遍,特殊是二进制,已频频使用于日常生涯中,特殊是二进制与十进制之间的转化作为各进制之间转化的桥梁。凡间引见的进制将的转化,是从理论上处理问题,而实践使用中不太适用。就拿测验来说,测验时碰见一个大的十进制整数数转换为二进制数,采用“除2取余”的办法不只费工夫还轻易犯错,假如采用本文所述的因式分化法来做则简略、直观,适用性更强,在编程使用中也是如斯。

更多计算机与外设信息请关注21ic计算机与外设频道



评论


技术专区

关闭