Loading... # 前言 在前不久,信息课老师讲解了进制转换的相关内容,就想着自己写个 `进制转换`的工具,一方面学习下C语言,另一方面也方便理解。其实在此之前也有CRC算法的讲解,也打算先研究下CRC算法的,但是看样子有些过于复杂,于是我选择了先将进制转换给弄了,截至目前 `2002.10.30日`,进制转换工具还是个半成品。 # 准备 * 集成工具:visual studio * 环境:Windows 11 ## 做足功课 在开始编写前,我们先回忆下各进制相互转换的过程,这样才能便于我们着手编写相应的函数实现 ## 其他进制转十进制 二进制转十进制非常简单,通过看下面的示例我们就可以轻易理解 * 示例:`10110.10110` 整数部分我们有5个数字,所以我们要从4次幂开始排序: $$ 1 \times 2^4+0\times2^3+1\times2^2+1\times2^1+0\times2^0 = 16+4+2=22 $$ 小数部分我们有5个数字,我们从-1次幂依次排序即可: $$ 1\times2^{-1}+0\times2^{-2}+1\times2^{-3}+1\times2^{-4}+0\times2^{-5}=\frac{1}{2}+\frac{1}{8}+\frac{1}{16}=0.6875 $$ **由此可以知道二进制10110.10110转换成十进制为 `22.6875`** <div class="tip inlineBlock info"> 因为是二进制转十进制,所以是2的多少次幂;同理八进制和十六进制转换十进制则分别是8的n次幂、16的n次幂 </div> ## 十进制转其他进制 了解了其他进制转换十进制,那么我们开始学习十进制怎么转为其他进制,同样的举例子理解 * 示例:`22.6875` 假设我们将22.6875转换为二进制,那我们整数部分除2取余数然后从最后往前排序即可: $$ 22\div2=11余0;11\div2=5余1;5\div2=2余1;2\div2=1余0;1\div2=0余1 $$ **从后往前排序为 `10110`** 小数部分乘2取整,反复取乘2得出结果的小数部分即可,从前往后排序: $$ 0.6875\times2=1.375取1;0.375\times2=0.75取0;0.75*2=1.5取1;0.5*2=1.00取1 $$ **从前往后排序为 `1011`** ## 二进制转八进制 二进制转换为八进制只需要记住一张表和一个规律即可,`小数点两边开,不足前方添零` 对照表格如下: | 二进制 | 八进制 | | ------ | ------ | | 000 | 0 | | 001 | 1 | | 010 | 2 | | 011 | 3 | | 100 | 4 | | 101 | 5 | | 110 | 6 | | 111 | 7 | 示例:`1101001.101` 整数部分从右往左3个一组,不够3个添0 | 二进制 | 001 | 101 | 001 | 整数部分结果 | | ------ | --- | --- | --- | ------------ | | 八进制 | 1 | 5 | 1 | 151 | 小数部分从左往右3个一组,不够3个添0 | 二进制 | 101 | 无 | 无 | 整数部分结果 | | ------ | --- | -- | -- | ------------ | | 八进制 | 5 | 0 | 0 | 0.500 | 最终二进制转为八进制结果为:`151.5` <div class="tip inlineBlock share"> 之所以3个分一组,是因为2的3次方=8;十六进制同理4个分一组 </div> ## 二进制转十六进制 原理和二进制转八进制大致相同,不过是4个分为一组 | 二进制 | 十六进制 | 二进制 | 十六进制 | | ------ | -------- | ------ | -------- | | 0000 | 0 | 1000 | 8 | | 0001 | 1 | 1001 | 9 | | 0010 | 2 | 1010 | A | | 0011 | 3 | 1011 | B | | 0100 | 4 | 1100 | C | | 0101 | 5 | 1101 | D | | 0110 | 6 | 1110 | E | | 0111 | 7 | 1111 | F | 示例:`101110011000111011` | 二进制 | 0010 | 1110 | 0110 | 0011 | 1011 | 结果 | | -------- | ---- | ---- | ---- | ---- | ---- | ----- | | 十六进制 | 2 | E | 6 | 3 | B | 2E63B | ## 八进制转二进制 ## 十六进制转二进制 Last modification:October 20, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 8 如果觉得我的文章对你有用,请随意赞赏