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

涉及范围:正整数范围内二进制(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. 互联网时代的社会语言学:基于SNS的文本数据挖掘

    今年上半年,我在人人网实习了一段时间,期间得到了很多宝贵的数据,并做了一些还算有意义的事情,在这里和大家一块儿分享.感谢人人网提供的数据 与工作环境,感谢赵继承博士.詹卫东老师的支持和建议.在这项工作 ...

  2. 机顶盒Demux

    主页http://www.videolan.org/vlc/ 机顶盒软件开发仿真平台的设计与实现http://max.book118.com/html/2012/0311/1260745.shtm

  3. [ASP.NET] Session的了解

    ASP.NET Session的使用当中我们会遇到很多的问题,那么这里我们来谈下经常出现的一些常用ASP.NET Session的理解: ASP.NET Session的七点认识之一 对于值类型的变量 ...

  4. Android 珍藏(二)

    一.如何控制Android  LED等?(设置NotificationManager的一些参数) 代码如下: final int ID_LED=19871103; NotificationManage ...

  5. unity中UI界面显示FPS

    直接上代码     using UnityEngine; using System.Collections;   public class HUDFPS : MonoBehaviour {       ...

  6. XML Schema验证

    XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模 ...

  7. Bootstrap 基本用法(续)

    在bootstrap中有很多的组件,这些组件可以帮组我们更快的写出一些好看的样式,下面就是一些样式: 导航框: <ul class="nav nav-tabs"> &l ...

  8. Oracle数据库对象_视图

    视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对 ...

  9. iOS访问通讯录开发-读取联系人信息

    读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案 ...

  10. 20101102--SQL字符串函数 ,日期和时间函数

    --------------------字符串函数------------------------- --ASCII 返回字符串的首字母的ASCII编码 select ASCII('w') selec ...