解释原理简单易懂 进制转换详解

前言:在网上看了许多篇关于不同进制之间如何转换的文章 , 包括很多浏览量上万的博客 。大多都只是把转换的规则罗列了出来 , 例如十进制转二进制 , 可能大家都知道方法 , “除以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 , 它可能是二进制 , 也可能是八进制 , 还有可能是十进制、十六进制 , 为了避免产生歧义 , 我们统一使用在不同数字后添加不同符号字母的方式来表示不同进制的数 。
不同进制所使用相应对后缀如下所示:
使用了对应单词的首字母 , 另外 , 注意八进制使用字母O表示 , 不要和数字0混淆 。
不同进制转换为十进制的规则
数码 * 基数^数位
上文有提及到 , * 表示乘法运算 。^表示幂运算 , 即基数的数位次方 。基数的数位次方 , 就是该位的位权 , 然后数码乘以该位的位权就是该位数值实际表示的数的大小 。
我们以1010.101B、68O、A6H转化十进制为例
1010B (基数:2 , 数位从右向左 , 从0开始)
【解释原理简单易懂进制转换详解】1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 + 1 * 2-1 + 0 * 2-2 + 1 * 2-3 = 10.625D
68O (基数:8)
6 * 81 + 8 * 8 0 = 48 + 8 = 56D
A6H (基数:16)
A * 161 + 6 * 160 = 10 * 16 + 6 = 166
应该很容易理解吧 , 任何进制转为十进制都是依据此方法计算 。例如 , 你可以尝试算下四进制数11 , 七进制数11分别表示的十进制是多少?答案在评论区 。