zoukankan      html  css  js  c++  java
  • 关于不同进制数之间转换的数学推导【Written By KillerLegend】

    关于不同进制数之间转换的数学推导

    涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换

    数的进制有多种,比如两双袜子为一双就采用二进制,平常的一周七天就采用七进制,每小时有六十分钟就采用六十进制。在计算机科学中我们经常用的有二进制,八进制,十进制,十六进制。计算机只能识别0和1组成的数字,但由于当一个数字比较大的时候,二进制的长度将变得非常长,对于人来说可读性非常差,而进制越大,那么数据显示的长度便越短,于是便产生了更大的进制。除了十进制外,至于为什么常用的是二进制,八进制,十六进制,一个合理的解释应该是它们是二的幂次。然而如果你非要问我,如果它们是二的幂次,那么为什么不常用用四进制,三十二进制,那么我只能无言以对了。好了,下面说说进制之间的转换方法。

    首先我们需要了解一些知识:

    关键词:基(radix),数位对应的数(number),数位(digit),权重(weight),记法

    (1)  基:对某一个进制数而言,它的基(radix)就是指该进制数的进制大小,比如我们说一个数为R进制,那么这个数的基就为R。为便于书写,我们记作R。

    (2)数位:数位的含义是:不同的计数单位,按照一定的顺序排列(在这儿我们定义为从右至左),它们所占的位置叫做数位。同时,我们从零开始,从右至左依次为这些位置编号。假如这个数有M位数,那么最左边的一个数的数位位置编号即为M-1,简要记作数位D=M-1。那么我们可以很快的推算出,一个数中第n个数(注意,我们默认从右至左,从零开始)的数位为n-1. 为便于书写,我们记作D。

    (3)数位对应的数:由字面意思可以知道,数位对应的数即为一个数中数位所对应的数,比如十进制数12345,其数位2对应的数为3. 为便于书写,我们将一个数中的某个数字记作N,将该数的数位记作ND

    (4)权重:通俗的说,就是某个数中的某个数字N所占的比重,其大小为N 与R的ND幂之乘积,我们记为W。如下图:

     

    (5)记法:在这里在数字后面附上用小括号括起进制英文的大写字母,表示该数的进制,通常十进制后面可以省略。如果已经明确的说明了某个数为几进制,在不引起混淆的情况下,那么后面的附加字母也可以省略。

    比如数101或者101(D)表示十进制数101,101(B)指二进制数101, 101(O)表示八进制数101,  101(H)表示十六进制数101. 另外,比如我们说二进制数101,我们便不必写为101(B)。

    现在我们开始计算:

    二进制,八进制,十进制-------->十进制

    记R进制数P由m个数字组成(不能以0开头,但可以以0结尾),P转换为十进制数P的公式(这博客园没有办法编辑公式,只好把word截图了):

    其中表示数位为i的数字的权重。也就是说,某个进制的数字转换为十进制的算法即是各个数位对应的数的权重之和。

    下面举个例子,将101010(B)转换为十进制数P(D)。显然这个数有六位数字组成,即m=6,所以为六个权重之和。依据上面的公式有,

    P(D)=0*2­0+1*21+0*22+1*23+0*24+1*25 =42

    即有:42(D)=101010(B)

    十六进制数2AF5换算成10进制:                      P(D)= 5 * 160   + F * 161 + A * 162 + 2 * 163 = 10997

                                                                            即有:10997(D)=2AF5(H)(注:在上面的计算中,A表示10,而F表示15)

    十进制-------->二进制,八进制,十进制

    为了便于表达,这里采用C语言中的两个符号%与/.其中%表示求余,反斜线/表示求商,比如15/7=2 15%7=1

    记十进制数P,将十进制数P转换为R进制数T,转换后R进制数的第i数位对应的数字为Ki,Ki求法为:

    Ki=(P/Rn)%R 【P≥Rn

    则有:T(R)= Ki Ki-1Ki-2…….. K1 K0 (只是简单的合并,并不是连乘)

    下面举个例子,将40转换为十六进制数:K0=(40/160)%16=8    K1 =(40/161)%5=2     所以T(16)= K1 K0=28 即有:28(16)=40(D)

    好了到现在为止,已经完成了十进制《======》二进制,八进制,十进制的正整数之间进制的互转(其实对于正整数之间进制的互转,上面的公式可以推广)。

    进制的转换算法还存在于负数以及小数之间,隔日再述。

    2013.9.18于大学逃课其间所创作……

    -----------KillerLegend

    ========================================================================================

    如有转载,请注明出处,如有疑问,请留言,如想进一步探讨,欢迎发消息至我的邮箱:chinamyth1@gmail.com

    欢迎访问我的博客:http://www.cnblogs.com/killerlegend

    ========================================================================================


    作者:KillerLegend
    出处:http://www.cnblogs.com/KillerLegend/
    分享最新的资源,分享个人所得,欢迎关注我的新浪微博
    新浪微博主页:ikey4u
    我的个人博客:www.ikey4u.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    HDU4474 Yet Another Multiple Problem BFS搜索
    HDU4473 Exam 数学分析
    2013ACM多校联合(4)
    POJ1273 网络流...
    HDU4472 Count 递推
    POJ1149 PIGS 网络流
    UVA10881 Piotr's Ants 想法题
    javascript js string.Format()收集
    修改 设置 vs.net 网站 调试 设为 起始页
    【转】HTML5杂谈 概念与现行游戏 割绳子 宝石迷阵
  • 原文地址:https://www.cnblogs.com/killerlegend/p/3328282.html
Copyright © 2011-2022 走看看