前言:在网上看了许多篇关于不同进制之间如何转换的文章,包括很多浏览量上万的博客。大多都只是把转换的规则罗列了出来,例如十进制转二进制,可能大家都知道方法,“除以2反向取余数,直到商为0”。应用该方法的确可以解决我们遇到的进制转换问题,但是如果问我们为什么这样做呢?可能很少有人可以回答的出来。另外,二进制、八进制、十进制、十六进制之间的转换规则有一大堆,当时费很大力气记住的规则,一段时间不使用,很容易就忘记了。于是,又从头到尾看了一遍原来的文章,不断的反复这个过程,浪费了很多时间和精力。根本原因是我们不了解底层的原理,当我们了解了底层原理之后,上述进制之间的转换规则完全可以自己推导出来,根本不用死记硬背。授人以渔,不如授人以渔。解决基本的进制转换问题,可以说看本篇文章就足够了。
进制转换
一、预备知识
希望读者可以认真阅读本部分内容,因为后文进制转换的原理会以此部分内容为基础
以十进制数“1234”为例:
数码:就是数中每一位的数字。如1、2、3、4
数位:数码在这个数中的位置,从右到左从0开始递增。例如4的数位为0、3的数位为1
基数:就是每一位的数码可以有多少个数字来表示。其实就是所谓的进制,十进制,基数为十,数码可以取的值有10个,分别是0~9。
位权:对于多数位,处在某一位上的“1”所表示的数值的大小,称为该位的位权。例如十进制数位0,位权为 10^0 = 1,数位1,位权10^1 = 10,…, 数位为n,位权为10^n 。公式为 基数的数位次幂
补充说明,如果包含小数部分,小数点后的第一个数的数位为-1,小数点后的第二个数的数位为-2,以此类堆。
二、其他进制转为十进制
我们先从最简单的情况,转换为十进制开始介绍。对于数字11,它可能是二进制,也可能是八进制,还有可能是十进制、十六进制,为了避免产生歧义,我们统一使用在不同数字后添加不同符号字母的方式来表示不同进制的数。
不同进制所使用相应对后缀如下所示:
- B, Binary (二进制)
- O,Octal (八进制)
- D,Decimal (十进制)
- H,Hexadecimal (十六进制)
使用了对应单词的首字母,另外,注意八进制使用字母O表示,不要和数字0混淆。
不同进制