嵌入式C语言学习笔记——进制、进制互相转换与转换十进制的万用法则

odin_zou 2022-08-31 19:54:19

在学C语言也好,单片机也好,plc也好,首要就是搞明白进制问题,进制深刻地影响我们对数据的判断和辨别,本篇将分享转换为十进制的万用法则。

 

一、进制

在数据处理这方面,我们一般采用的进制有:

十六进制、八进制、二进制和十进制。

在嵌入式C语言中,一般普通数据采用十进制,按位操作则使用二进制,当操作字节或位数较大的数则使用十六进制

 

二、进制相互转换

在介绍进制转换之前,首先要知道除了十进制外,八进制和十六进制通常都由二进制转变而来。

二进制一般采用“8421”结构速记,即以四位二进制数为例,按从右向左的顺序,第一位代表2的0次方,第二位代表2的1次方,以此类推至第四位。   在面对该类二进制数时只需以每四位为一组,将为二进制为1的对应位的对应数加起来即可等到对应十进制数。

eg.1111(二进制数)=1x2^3+1x2^2+1x2^1+1x2^0=8+4+2+1=15(十进制数)=F(十六进制数)=17(八进制数)

可以发现,四位二进制最大值正好可以容纳一位十六进制数

通常来说,以一位是一个二进制数为例,每三位为一个八进制数,每四位是一个十六进制数,以下详解:

1.二进制转十六进制

以字节为例,一个字节由8位二进制数组成,所以由于每四位为一个十六进制数,则一个字节一般可以以两个十六进制数表示。

一般习惯上用“8421”转四位二进制数为十进制再转十六进制。

eg.1101 0101(二进制)=8+4+1  4+1=13  5=D5(十六进制)

2.二进制转八进制

“8421”法则依然通用,三位二进制数正好可以表示一位八进制数,使用方法雷同十六进制数,只不过只需“421”三位即可。

3.十进制转二进制

一般将该十进制数除以2,反向取余数部分,可除尽部分为0,将余数从下向上排列即可。可参考文末链接。

eg.  2  |109

        2 |54............1

          2|27...........0

            2|13.........1

              2|6.........1

                2|3.......0

                  2|1.....1

                      0....1

则得到的二进制数为0110 1101(习惯上最好写为方便十六进制表示的写法)

*快捷算法:8位以内最好试着“8421”快速计算

3.十进制转八进制、十六进制

转八进制:一般将该十进制数除以8,反向取余数部分,可除尽部分为0,将余数从下向上排列即可。可参考文末链接。

转十六进制:一般将该十进制数除以16,反向取余数部分,可除尽部分为0,将余数从下向上排列即可。可参考文末链接。

 

三、十进制转换万用法则

对于一般人来说,十进制是最熟悉不过的进制法了,所以我们将会围绕十进制展开我们的万用公式。  

首先我们要理解进制的语言含义:“进”表示进位,“制”表示制度,则进位也即是进位的制度 。

我们可以将进制分为两个部分:

1.基础字符

2.进制度数

以十进制为例,其基础字符为0-9,进制度数为10,即每十个数进一位,所以其他几种进制如下表:

进制基础字符(代表十进制数)进制度数
二进制0-1(0-1)2
八进制0-7(0-7)8
十六进制0-F(0-15)(其中0-9不变,10-15照字母表顺序对应A-F)16

 其次我们要看进制规律,

以十进制为例,如下:

个位数:eg.   2=2x10^0=2x1                                               7=7x10^0=7x1=7

十位数:eg.  19=1x10^1+9x10^0=1x10+9x1=10+9             68=6x10^1+8x10^0=6x10+8x1=60+8

百位数:eg.  123=1x10^2+2x10^1+3x10^0=1x100+2x10+3x1=100+20+3

……

由此可以看出,十进制的数从个位数开始,每一位代表着10的不同次方,个位数代表10的0次方,十位数代表10的1次方,百位数代表10的2次方,以此类推,很容易就能得出各种不同的十进制数。而更加直观的看的话可以当成从最右向左数,最右为进制度数的0次方,第二右的为进制度数的1次方。。。

所以,其他进制的算法也是同一原理:

十六进制:eg.BF=B(可看作十进制数11)x16^1+F(可看作十进制数15)x16^0=11x16+15x1=181(十进制数)

八进制:eg. 123=1x8^2+2x8^1+3x8^0=1x64+2x8+3x1=75(十进制数)

二进制:eg.1010=1x2^3+0x2^2+1x2^1+0x2^0=1x8+0x4+1x2+0x1=8+0+2+0=10(十进制数)

 

进制部分也可参考该文章:

http://t.csdn.cn/Dkqln                            

...全文
747 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
odin_zou 2022-09-13
  • 打赏
  • 举报
回复

175

社区成员

发帖
与我相关
我的任务
社区管理员
  • c_university_2801
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧