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

涉及范围:正整数范围内二进制(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. 基于 SOA 的组件化业务基础平台

    业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 “应用软件的业务描述和操作系统平台.软件基础架构平台之间的交互与管理问题”.操作系统平台解决了“应用软件系统与硬件之间的交互与管理问题” ...

  2. 重构12-Break Dependencies(打破依赖)

    有些单元测试需要恰当的测试“缝隙”(test seam)来模拟/隔离一些不想被测试的部分.如果你正想在代码中引入这种单元测试,那么今天介绍的重构就十分有用.在这个例子中,我们的客户端代码使用一个静态类 ...

  3. 使用app loader上传iOS应用

    正如上篇文章中提到的,因为一些原因我尝试通过app loader打包上传应用到appStore  其实这个使用还是挺简单 的 首先要知道怎么打开loader 打开方式有两种  一种是直接打开loade ...

  4. Oracle基础<1>--数据库设计

    一:为什么需要使用数据库设计 数据库设计可以使数据库通过健壮的数据库结构  高效并且健康  的进行工作. 二.数据库设计原则 (数据库设计.系统设计.架构设计) 1.熟悉需求 保证之后需求的变更 不会 ...

  5. SQL语言简介

    什么是SQL语言? 是高级非过程化语言(是沟通数据库服务器和客户端的工具) 作用:存取,查询,更新和管理关系数据库系统 SQL语言分类: 1.DDL:数据定义语言 作用:定义和管理数据当中的各种对象 ...

  6. 【Amazon Linux】免费搭建subversion服务器

    Amazon的EC2服务器可以免费试用一年.在这里申请: https://aws.amazon.com/cn/free/ 尝试把它弄成一个svn库来保存代码.按照 http://northwaygam ...

  7. 2000 Asia shanghai Dance Dance Revolution

    思路:dp[i][x][y]表示第i个序列中,右脚在x位置,左脚在y位置时,其最小花费. 那么dp[i][x][y]=min(dp[i-1][a[i]][y]+cost[a[i]][x],dp[i-1 ...

  8. 【转】华为Java编程军规,每季度代码验收标准

    引言: 这个标准是衡量代码本身的缺陷,也是衡量一个研发人员本身的价值. 军规一:[避免在程序中使用魔鬼数字,必须用有意义的常量来标识.] 军规二:[明确方法的功能,一个方法仅完成一个功能.] 军规三: ...

  9. PHP利用GD库画曲线

    效果: PHP代码 <?php Header('Content-type: image/png;Charset:utf-8'); //声明图片 $im = imagecreate(400,200 ...

  10. IOS显示九宫格列表

    //总列数 ; CGFloat appW = ; CGFloat appH = ; //间隙 CGFloat maginX = (self.view.frame.size.width - totalC ...