编程基础知识(变简单的进制转换)

编程基础——进制转换

前言

   世界上有10种人,懂二进制的和不懂二进制的。
   有同学会问,你说世界上有10种人,为啥只说了两个呢。这里的10可不一定是自然数十,也可能是二进制的一和零,不懂的同学看完这篇文章保证你明明白白(不明白你来打我)。
   

一、什么是进制

   进制就是进位制,是人们规定的一种进位方法。比如X进制,就是每逢X就进一位。二进制是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。一个数值可以在不同的进制之间转换,就是我们接下来要讲的进制转换。
   

二、二进制转十进制

1.按权相加法

   将二进制每一位上的数乘以权,然后加起来的和就是十进制。
   
   权:假设X进制,整数部分的第i位的权是 X i − 1 X^{i-1} Xi1,小数部分第i位权为 X − i X^{-i} Xi.
   
   将二进制101.01转换为十进制,示例如下:
   
    1 ∗ 2 2 + 0 ∗ 2 1 + 1 ∗ 2 0 + 0 ∗ 2 − 1 + 1 ∗ 2 − 2 = 5.25 1*2^2+0*2^1+1*2^0+0*2^{-1}+1*2^{-2}=5.25 122+021+120+021+122=5.25
   
   因为0乘任何数都为零,所以我们可以简化一下:
   
    1 ∗ 2 2 + 1 ∗ 2 0 + 1 ∗ 2 − 2 = 5.25 1*2^2+1*2^0+1*2^{-2}=5.25 122+120+122=5.25
   

2.口算法

   如果你嫌上面的算法太繁琐,可以练习口算,我个人比较喜欢的一种方法,适合日常计算一些简短的二进制(常用于计算IP地址)。你仔细观察的话会发现上面的公式是有规律的:将二进制位上的数乘以权i,结果是 0 0 0或是 2 i 2^i 2i,这有就像在玩2048游戏。

2048 1024 512 256 128 64 32 16 8 4 2 1

   把上面的数背过,有能力的话可以背更多,然后对照起来就可以用简单的加法转换二进制。
   
   举个栗子:

二进制:1   1  0  1  0  1  0  1
对照: 128 64 32 16  8  4  2  1

   将二进制1对应位置的数相加,0对应的数忽略,结果为
   
    128 + 64 + 0 + 16 + 0 + 4 + 0 + 1 = 213 128+64+0+16+0+4+0+1=213 128+64+0+16+0+4+0+1=213
   

三、十进制转二进制

   十进制转换二进制时,整数与小数部分转换方法不同,我们可以分开转换,最后再合并一起。

1.整数部分—除二取余法

   将整数部分除以2,取余数,商继续除2,直到商为0为止,最终余数倒着写出来就是转换完成的二进制数。
   
   比如将十进制数10,转换为二进制数:

10/2=50
 5/2=21
 2/2=10
 1/2=01

   将余数从后到前列出来,就是10的二进制数:1010
   

2.小数部分—乘二取整法

   将小数部分乘以2,取整数部分,剩余小数继续乘以2,直到小数部分为0为止。
   
   比如将十进制小数0.125,转换为二进制数:

0.125*2=0.25 整数部分0
0.25*2=0.5   整数部分0
0.5*2=1      整数部分1

   注意小数部分不是逆序取值了,而是顺序,所以0.125的二进制数是:001
   

3.口算法

   跟二进制转十进制的原理是一样的,只不过是反着来而已。用十进制数减参照数(最接近本身数值,又小于等于本身数值的),减的开就得1,减不开就得0,差继续递减参照数。

2048 1024 512 256 128 64 32 16 8 4 2 1

   比如我们再把213转回去:

213-128=85 减开得1
85-64=21   减开得1
21-32    减不开得0
21-16=5    减开得1
5-8      减不开得0
5-4=1      减开得1
1-2      减不开得0
1-1        减开得1

   最终结果为:1101 0101,是不是和上面一样。
   

四、二进制转八进制

   八进制与二进制的关系: 2 3 = 8 2^3=8 23=8,即用三位二进制数表示一个八进制数。

1.取三合一法

   从二进制小数点位置,向左向右每三位取成一位(不足三位补零),将每一位的三个二进制数转换为十进制数,然后按顺序排列,得到的便是八进制数。
   
   如将1101.01转化为八进制:

001 101 . 010
 1   5  .  2

   最终结果为:15.2
   

五、八进制转二进制

1.取一分三法

   逆行上面的算法,将八进制每一位数分解成三位二进制数,然后去零,便能得到结果。
   
   如将八进制数43.2转换为二进制数:

 4   3  .  2
100 011 . 010

   最终结果为:100 011.01
   

六、二进制转十六进制

   二进制与十六进制的关系: 2 4 = 16 2^4=16 24=16,即用四位二进制数表示一个十六进制数。相信大家都猜到了,他们的转换方式与八进制的相似。
   

1.取四合一法

   从二进制小数点位置,向左向右每四位取成一位(不足四位补零),将每一位的四个二进制数转换为十进制数,然后按顺序排列,得到的便是十六进制数。
   
   如将二进制数101011.101转换为十六进制:

0010 1011 . 1010
  2   B   .   A

   最终结果为:2B.A
   

七、十六进制转二进制

1.取一分四法

   将一位十六进制数分解为四位二进制数,去掉多余的零。
   
   如将十六进制数6E.2转换成二进制数:

  6   E   .  2
0110 1110 . 0010
 110 1110 . 001  \\去零

   得到最终结果为:110 1110 . 001
   

八、十六进制与八进制的转换

   十六进制与八进制不能直接转换,可以先将其转换为二进制,再转换为其他进制。
   

九、八进制、十六进制、十进制之间的转换

1.直接转换

   与二进制按权相加法相同,只需改变 X X X的值便可。
   
   将 X X X进制每一位上的数乘以权,然后加起来的和就是十进制。
   
   权:假设X进制,整数部分的第i位的权是 X i − 1 X^{i-1} Xi1,小数部分第i位权为 X − i X^{-i} Xi.
   

2.间接转换

   先将其转换为二进制数,再将二进制数转换为相应进制数即可。
   

结束语

   有的同学刚接触进制转换可能会比较懵逼,甚至不清楚进制的含义,其实只要把二进制弄明白,其余进制的转换就会变得很EZ。
   
   还没看懂的同学先别着急拔刀,让我先跑39米,溜了~

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓时谷雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值