大家好,欢迎来到程序视点
!我是小二哥。
今天,紧接着上期的进制的主题,我们一起来看看进制间的转换问题?这要都分不清楚,咋好意思说我们是做程序的呐~
前言
对于整数,有四种常见的表示方式:
- 二进制(binary):0,1 ,满2进1.以0b或0B开头。
- 十进制(decimal):0-9 ,满10进1。
- 八进制(octal):0-7 ,满8进1. 以数字0开头表示。
- 十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
我们先来回顾下二进制的相关知识。用张图来总结下:
因此,-1
的在计算机中的二进制码是这样来的。
十进制与二进制、八进制、十六进制转换(重点)
首先我们来学习十进制与二进制之间的转换,这是必须要掌握的哦。
十进制转二进制
如果我们想将十进制转为二进制,可以采用辗转法,将十进制除以2再取余,然后将余数和最后的1按照从下向上倒序写的方法。例如,把十进制的150
转为二进制的10010110
来个顺口溜记一下:除2取余,逆排序
这个方式对不对呢?当然是对的!我们将二进制数按权展开,相加即为十进制的数。这就是我们二进制转十进制的方法。
二进制转十进制
从左到右,每个二进制数按权展开相加,得到十进制数。现在把上面的10010110
转回去。
对于二进制到十进制的转换,大家记住一个从左到右,1248规律
即可。最低位上计算出来的十进制结果最大值就是1,往前一位的最大值是2,以此类推,4、8、16、32、64、128、256..... 因此,如果该二进制位上是1,该位置上肯定可以得到对应的十进制最大值,否则只能得到0。比如11111111转成对应的十进制,就可以直接计算:1 2 4 8 16 32 64 128=255
有了上面十进制和二进制间的转换关系,我们可以依葫芦画瓢解决十进制与八进制和十六进制的转换问题。
十进制转八进制或十六进制
十进制转二进制是:除2取余,逆排序
那么,我们可以顺势记住如下结论:
十进制转八进制就是:除8取余,逆排序十进制转八进制就是:除16取余,逆排序
八进制或十六进制转十进制
二进制数据采用位置计数法,其位权是以2为底的幂。这就是我们前面说的“按权展开相加”。同理,八进制和十六进制也可以这样推导:八进制的位权是以8为底的幂,十六进制的位权是以16为底的幂。
ps:这里需要记住一个知识点。无论几进制,最低位都是1,n进制位权计算:高位=低位n。
二进制 第1位:1(最低位位权) 第2位:12=2 第3位:22=4 ...
二进制与八进制和十六进制的转换
十进制转二进制、八进制、十六进制,我们按照一个套路就搞定了。这非常好理解和记忆。那二进制、八进制、十六进制间怎么转换呢?
最实在的办法是:转为十进制后,再转为其他进制。这个方法绝对不会错。
好啦!有的小伙伴就说了,这样要除来除去,还有求幂,太麻烦了!有没有比较取巧的方法呢?
有的!
关键点在:8是2 ^ 3,16是2 ^ 4。二进制转八进制和十六进制可以利用其转换。通俗的讲,就是每3个二进制位表示一个八进制位,每4个二进制位表示一个十六进制位。
二进制转八进制
八进制转二进制
二进制转八进制,是每3个二进制位表示一个八进制位(即每3个二进制位按权展开求和得到一个八进制位)。那反过来,一个八进制位要得到它对应的3个二进制位,不就是除2取余,逆排序吗?
二进制转十六进制
十六进制转二进制
有了前面八进制转二进制的推论,我们也可以知道:一个十六进制位要得到它对应的4个二进制位,就是除16取余,逆排序。
小结
进制转换在笔试中也可能考察,是一个基础的内容。这个部分相对比较简单,就怕大家把自己绕进去了。本文涵盖了常见的二进制、八进制、十进制、十六进制间的转换问题。主要分两个部分:一是十进制与二进制、八进制、十六进制的转换,二是二进制与八进制、十六进制的转换。有了这两个基础,八进制和十六进制间的转换,就可以用十进制或二进制作为中间桥梁进行转换了。