进制算法

十进制转换二进制

1. 十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
$$
255=(11111111)B
255/2=127=余1
127/2=63
余1
63/2=31
=余1
31/2=15
=余1
15/2=7
余1
7/2=3
=余1
3/2=1
=余1
1/2=0
===余1

789=1100010101(B)
789/2=394 余1 第10位
394/2=197 余0 第9位
197/2=98 余1 第8位
98/2=49 余0 第7位
49/2=24 余1 第6位
24/2=12 余0 第5位
12/2=6 余0 第4位
6/2=3 余0 第3位
3/2=1 余1 第2位
1/2=0 余1 第1位
$$

原理:

众所周知,二进制的基数为2,我们十进制化二进制时所除的2就是它的基数。谈到它的原理,就不得不说说关于位权的概念。某进制计数制中各位数字符号所表示的数值表示该数字符号值乘以一个与数字符号有关的常数,该常数称为 “位权 ” 。位权的大小是以基数为底,数字符号所处的位置的序号为指数的整数次幂。十进制数的百位、十位、个位、十分位的权分别是10的2次方、10的1次方、10的0次方,10的-1次方。二进制数就是2的n次幂。

按权展开求和正是非十进制化十进制的方法。

下面我们开讲原理,举个十进制整数转换为二进制整数的例子,假设十进制整数A化得的二进制数为edcba 的形式,那么用上面的方法按权展开, 得

A=a(20)+b(21)+c(22)+d(23)+e(2^4) (后面的和不正是化十进制的过程吗)

假设该数未转化为二进制,除以基数2得

A/2=a(20)/2+b(21)/2+c(22)/2+d(23)/2+e(2^4)/2

注意:a除不开二,余下了!其他的绝对能除开,因为他们都包含2,而a乘的是1,他本身绝对不包含因数2,只能余下。

商得:

b(20)+c(21)+d(22)+e(23),再除以基数2余下了b,以此类推。

当这个数不能再被2除时,先余掉的a位数在原数低,而后来的余数数位高,所以要把所有的余数反过来写。正好是edcba

十进制小数转换为二进制小数

关于十进制小数转换为二进制小数

假设一十进制小数B化为了二进制小数0.ab的形式,同样按权展开,得

B=a(2-1)+b(2-2)

因为小数部分的位权是负次幂,所以我们只能乘2,得

2B=a+b(2^-1)

注意a变成了整数部分,我们取整数正好是取到了a,剩下的小数部分也如此。

值得一提的是,小数部分的按权展开的数位顺数正好和整数部分相反,所以不必反向取余数了
0.625 = ( 0.101 ) B 0.625 ∗ 2 = 1.25 = = = = = = 取 出 整 数 部 分 10.25 ∗ 2 = 0.5 = = = = = = = = 取 出 整 数 部 分 00.5 ∗ 2 = 1 = = = = = = = = = = 取 出 整 数 部 分 1 0.625=(0.101)B 0.625*2=1.25======取出整数部分1 0.25*2=0.5========取出整数部分0 0.5*2=1==========取出整数部分1 0.625=0.101B0.6252=1.25======10.252=0.5========00.52=1==========1

二进制与八进制的转换

(1)二进制转八进制

从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。

【例】:将二进制的10110.0011转换成八进制:

0 1 0 1 1 0 . 0 0 1 1 0 0

2 6 . 1 4

即:(10110.0011)2 = (26.14)8

(2)八进制转二进制

把每一个八进制数转换成3位的二进制数,就得到一个二进制数。

【例】:将八进制的37.416转换成二进制数:

3 7 . 4 16

011 111 .100001 110

即:(37.416)8 =(11111.10000111)2

二进制与十六进制的转换

十六进制数字与二进制数字的对应关系如下:

0000 -> 0 0100 -> 4 1000 -> 8 1100 -> C

0001 -> 1 0101 -> 5 1001 -> 9 1101 -> D

0010 -> 2 0110 -> 6 1010 -> A 1110 -> E

0011 -> 3 0111 -> 7 1011 -> B 1111 -> F

(1)二进制转十六进制

二进制数转换成十六进制数时,只要从小数点位置开始,向左或向右每四位二进制划分一组(不足四位数可补0),然后写出每一组二进制数所对应的十六进制数码即可。

【例】:将二进制数1100001.111 转换成十六进制:

0110 0001 .1110

6 1 . E

即:(1100001.111)2 =(61.E)16

(2)十六进制转二进制

把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。

【例】:将十六进制数5DF.9 转换成二进制:

5 D F . 9

0101 1101 1111 .1001

即:(5DF.9)16 =(10111011111.1001)2

八进制与十进制的转换

(1)八进制转十进制

整体顺序、小数点不变,个位乘8的0次方+十位乘8的1次方…=十进制得数,即可。小数部分从左到右乘8的负一次方开始,以此类推。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QopBrFWW-1620204186922)(D:\HUAWEI\Typora作业笔记\20190107233224837.png)]

(2)十进制转八进制

整体顺序、小数点不变,整数部分除8,余数倒着从左向右排,小数部分乘8,整数自左向右排。

整数部分:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5f6fA559-1620204186924)(D:\HUAWEI\Typora作业笔记\20190107233253193.png)]

小数部分:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ryk42g9Y-1620204186927)(D:\HUAWEI\Typora作业笔记\20190107233314290.png)]

十进制与十六进制的转换
(1)十六进制转十进制

16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……

【例】:例:2AF5换算成10进制: 5 * 16^0 + F * 16^1 + A* 16^2 + 2 * 16^3 = 10997

(2)十进制转十六进制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-biGsmDDO-1620204186929)(D:\HUAWEI\Typora作业笔记\20190107233335937.png)]

除16取余,直到商为0为止

你可能感兴趣的:(其他)