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


从展开式角度看 , 所有数位都增加了1 , 原来小数的最高位 , 已经成为了整数的最低位 , 已经不是小数部分的数码了 。数位为0的数码就是小数部分数位为-1(小数部分的最高位的数码) , 此时数位为0的数码是1 , 所以小数数位的最高位为1
或者简单的理解方式 , 一个小数乘以该数的基数相当于小数点向右移动一位 , 那么得到的整数的最低位自然就是原来小数的最高位
让我们回到最初的问题:十进制小数转化为二进制小数的规则为什么是乘以2取整 , 正向按顺序取整数?
乘以2是因为2是二进制的基数 , (相当于小数点向右移动一位)
正向按顺序取整是因为 , 乘以2得到的第一个整数是原来小数的最高位 , 得到的第二个整数时原来小数的第二最高位 。可以想想小数点一步步向右移动 , 每次得到的都是新小数的最高位 。
对于其他进制处理方式和二进制相同 , 乘以基数按顺序取整 。
至此 , 我们学习了其他进制转化位十进制和十进制转化为其他进制的规则 。这里做一个小总结:
其它进制转化为十进制
数码 * 基数^数位
十进制转化为其他进制
整数部分处理
当一个某进制的整数除以该数的基数 , 得到的余数就是数位为0(最低位或最后一位)的数码 。
小数部分处理
当一个某进制的小数乘以该数的基数 , 得到的整数部分的值(数位为0的数码)就是小数部分数位为-1(小数部分最高位或第一位)的数码 。
换个思路 , 一个某进制的小数乘以该数的基数 , 其效果等同于小数点向右边移动一位 , 得到的整数部分的最低为数码自然是原小数部分最高位的数码 。
其实到这里就可以实现任意两个进制之间的转换了 , 思路是通过十进制这座桥梁 , 先把待转换进制转化为十进制 , 在把十进制转化为最终的目标进制 。
不过 , 二进制和八进制、二进制和十六进制之间的转换还存在更简单的方式 , 因此我们下文继续来介绍 。
四、二进制和八进制、十六进制之间的转化 1. 二进制转化为八进制、十六进制
我依然想用“展开式”的方式 , 来建立二进制和八进制以及二进制和十六进制之间的联系 , 
= 20O = 10H
1*24 + 0 * 23 + 0 * 22 + 0 * 21 + 0 * 20
2 * 82 + 0 * 80
1 * 161 + 0 * 160
似乎无法找出它们在数学上的联系 。获取是我数学水平没有达到 , 如果有哪位大佬可以看出来可以在评论区留言 , 不过我想尝试利用本文的预备知识来给出一个相对看似合理的解释 。可以重新回顾下预备知识如果忘记了 。
如图所示 , 一个方格表示一个二进制位 , 把单独一个小格看成一个整体 , 其能表示两种状态 , 换句话说 , 每一个位可以有两个数字来表示 , 所以是二进制数 。
把连续的两个方格看成一个整体 , 其可以表示四种状态 , 换句话说 , 每一位可以有四个数字来表示 , 所以相当于四进制数 。
把连续的三个方格看成一个整体 , 其可以表示8种状态 , 换句化说 , 每一个位可以有八个数字表示 , 所以相当于8进制 。
其它略 。
我们以8进制为例 , 
其每一个的数码包括{0, 1 , 2, 3, 4, 5, 6, 7}  , 其本质就是8种连续的状态而已 , 我们可以使用三位二进制来表示这八种状态{000 ,  001 ,  010 ,  011 ,  100 ,  101 ,  110 ,  111}