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

涉及范围:正整数范围内二进制(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

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


672
-->

关于不同进制数之间转换的数学推导【Written By KillerLegend】的更多相关文章

  1. js各种进制数之间的转换

    计算机中常用的进制数有二进制.八进制.十进制.十六进制 一.十进制 to 其他 var x = 10; // 或定义其他值均可 x.toString(n); // n 代表要转换到的进制,比如n可以为 ...

  2. HDOJ/HDU 2352 Verdis Quo(罗马数字与10进制数的转换)

    Problem Description The Romans used letters from their Latin alphabet to represent each of the seven ...

  3. 【题解】洛谷P1066 [NOIP2006TG] 2^k进制数(复杂高精+组合推导)

    洛谷P1066:https://www.luogu.org/problemnew/show/P1066 思路 挺难的一道题 也很复杂 满足题目要求的种数是两类组合数之和 r的最多位数m为 w/k(当w ...

  4. (任意进制转换)将 r 进制数转成 k 进制数

    我们知道任意进制转换为十进制,都是乘以基数的多少次方,然后相加: 十进制转换为任意进制,都是除以基数,然后倒着取余数: 所以这里是用十进制数中转,实现任意进制数的转换 #include<iost ...

  5. 编程实现将一个N进制数转换成M进制数

    问题:编程实现将一个N进制数转换成M进制数.(c/c++.Java.Javascript.C#.Python) 1.Python 手写算法版 def conversion_num(num, src, ...

  6. 汇编:1位16进制数到ASCII码转换

    ;============================ ;1位16进制数到ASCII码转换 ; { X+30H (0≤X≤9) ;Y= { ; { X+37H (0AH≤X≤0FH) DATAS ...

  7. 常用进制的转换、进制数的and与or或xor异或运算

    [十进制转换成其他进制]例:将25转换为二进制数 解: 25÷2=12 余数1  12÷2=6   余数0  6÷2=3     余数0  3÷2=1     余数1  1÷2=0     余数1 所 ...

  8. C++中,将单精度浮点数转换成2进制数

    在C++里,实数(float)是用四个字节即三十二位二进制位来存储的.其中有1位符号位,8位指数位和23位有效数字位.实际上有效数字位是24位,因为第一位有效数字总是"1",不必存 ...

  9. C# 2进制、8进制、10进制、16进制...各种进制间的转换(三) 数值运算和位运算

    一.数值运算 各进制的数值计算很简单,把各进制数转换成 十进制数进行计算,然后再转换成原类型即可. 举例 :二进制之间的加法 /// <summary> /// 二进制之间的加法 /// ...

随机推荐

  1. 常见的 HTTP错误代码大全

    一些常见的状态码为: - 服务器成功返回网页 - 请求的网页不存在 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 (继续) 请求者应当继 ...

  2. ZOJ 1586 QS Network (最小生成树)

    QS Network Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Sta ...

  3. 流操作text文件------读取、保存文档

    ************************************一.读取指定text文档中的内容:**************************************** 方法一. t ...

  4. latex之设置字体大小

    \tiny\scriptsize\footnotesize\small\normalsize\large\Large\LARGE\huge\Huge

  5. C#this关键字用法

    用法一 this关键字的作用是解决当传入参数的名称和数据字段的名称,类型完全相同时产生的作用于歧义,一般情况下我们应该避免产生重名的习惯 先来演示下: class Airplane { public ...

  6. Eclipse中调试技巧

    1.打印输出 System.outprintln(“执行了此程序"); 2.运用Log方法: 示例 Log.d("myDubug",  "myFirstDebu ...

  7. SQL Server 2008 报表服务入门

    目录 报表服务的安装与配置 开发报表的过程 报表制作实例 一.报表服务的安装与配置 1. 报表服务的组件 2. 报表服务 2008 的安装 2.1在SQL Server 2008上安装报表服务有两种方 ...

  8. CSS之隐藏元素

    1.opacity=0,该元素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如click事件,那么点击该区域,也能触发点击事件的2.visibility=hidden,该元素隐藏起 ...

  9. STP详解

    STP详解 Write From YangWj Wednesday, March 5, 2014 一. 生成树协议 STP的主要任务是阻止在第2层网络(网桥或交换机)产生网络环路,它警惕的监视着网络中 ...

  10. iOS开发那些事-iOS6苹果地图实用开发

    在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化.开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也同样适用于iOS5 ...