zoukankan      html  css  js  c++  java
  • 进制转换

      进位计数制

      生活中我们常用的是10进制,但在计算机中数据都是以2进制的形式保存的。因此,熟练掌握2进制的特点和运算是编写程序并不可少的前提。

      一般来说,进位计数制包含三个要素:

    1. 数制使用的数码:十进制含10个数码0~9,二进制含2个数码0和1等。
    2. 进位规则:十进制为逢十进一,二进制为逢二进一等。

    3. 每一个数位上数码所具有的权:十进制数码各位的权是以10为底的幂,二进制数码各位的权是以2为底的幂。

      一般而言,对于用R进制表示的数N(R为任意正整数),可以按权展开为:

      N=Kn×Rn+Kn-1×Rn-1+…+K1×R1+K0×R0+K-1×R-1+…+K-m×R-m  (公式A)

      例:828.8 = 8×102+2×101+8×100+8×10-1,这里必须要注意的是任何进制中个位数的权值都是1,从右往左权值越来越大。

      常用进制

      在计算机中,常用的进制有四种:2进制(代号B),8进制(代号O),16进制(代号H)和10进制(代号D),其中16进制所用的数码为0-9和A-F(A代表10,F代表15)。这里之所以加入了8进制和16进制,是因为用2进制表达数值需要的位数往往很大,不便于书写和阅读。

      不同的进位计数制之间需要进行转换,而且以10进制与2进制之间的转换为主,需要熟练掌握。另外为了今后的计算方便,最好能够熟练掌握0-15之间的各进制的表示,这会大大方便今后的学习。

      

      进制转换

      1、任意进制转换为10进制:任意R进制数转换成十进制数比较简单,只需按权展开然后相加,其和便是相应的十进制数。这种方法称为按权相加法。

      这里还是需要提醒一下,计算权值的时候需要从个位开始数起,往左递增,往右递减。

      例:求与(11011.01)2等值的十进数

      (11011.01)2=1×24+1×23+0×22+1×21+1×20+0×2-1+1×2-2=16+8+0+1+0+0.25=(27.25)10

      例:将十六进制数35B转换成十进数.

      (35B)16=3×162+5×161+11×160=768+80+11=(859)10

      2、10进制整数转换为其他进制:这里主要用的是除基取余法。

      由上面的公式A容易得知:将N除以R之后,K0这一项就成为了本次除法的余数,然后继续重复该过程,就依次取得了K1,K2直至Kn,当数变成0的时候过程结束。

      注意这里是倒序的过程,首先取得的数反而是在最后面。

      例:将10进制的18转换为2进制,推演过程如下。

      

      所以(18)10=(10010)2

      将10进制的数转换为其他进制的方法是雷同的。

      例:100除以16余数为4商为6,因此K0=4;6除以16余数为6商为0,因此K1=6,所以(100)10=(64)16

      3、2进制与8进制、16进制间的转换

      二进制数转换成八进制数的方法可以概括为“三位并一位”,八进制数转换成二进制数的方法可以概括为“一位拆三位”;  

      二进制数转换成十六进制数的方法可以概括为“四位并一位”,十六进制数转换成二进制数的方法可以概括为“一位拆四位”

      例: 将 (11101.1101)2转换成八进制数。

      解:  0 1 1 1 0 1 . 1 1 0 1 0 0

                    3      5          6     4

      所以  (11101.1101)2=(35.64)8

      这里特别要注意的是,如果位数不正好是3或4的倍数的话,需要在整数位的最前方和小数位的最后方补0,这样才不会改变原有数的值。

      例:将(25.C4)16转换成二进制数。

      解: 2      5  .     C      4

        0010  0101   1100  0100

      所以  (25.C4)16=(100101.110001)2

      另外,任意进制间的小数转换比较复杂且很可能会得到无限循环的小数,这里就不展开了。

      总结与提示

      1、掌握和了解不同的进制是学习计算机编程的必备环节,特别是2进制的内容和计算,必须熟练掌握。

      2、将10进制转换为2进制,用除基取余法显得有些笨重,而且运算次数过多。在下一个专题中,将介绍一种相对简便快捷的方法。

      3、8,16进制和2进制的转换,需要注意必须从个位数开始进行数数。如(11111)2=(37)8,而不是(76)8,补0只能补在最前或者最后,不能补在中间。

  • 相关阅读:
    如何学习新技术
    创建模式之工厂方法模式
    SQL Server 存储过程
    ASP.NET Cache的一些总结
    ACE_TSS研究
    利用Thunk让C++成员函数变回调函数
    ACE内存映射学习
    ACE的初始化
    双检锁模式学习
    ACE_Task笔记
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3003507.html
Copyright © 2011-2022 走看看