对于一般学习中,最常见的就是4种,二进制,八进制,十进制以及十六进制。在大一的C语言学习当中,学校粗略的说了一下这些,最后导致好多人无法流畅的进行进制之间的转化,以及使用。在大一接触单片机以后更加发进制之间转化的一些规律等,现在来谈一下。
1.关于十进制与二进制之间的转化。
在这四种进制当中,最常用的就是十进制了,从我们开始学数学开始,一直用的就是十进制。二进制,就是0和1,这是机器能够读懂的数。
最简单的二进制转化十进制是按照权展开求和,例:1100,可以写成1*2^3+1*2^2=12,所以得出来了十进制数。规律是从右往左,第一位是2^0,第二位是2^向前2^2,然后依次类推加起来的和即为十进制数。
然后是十进制转化二进制,
除二取余法(大多用于整数):将整数部分辗转相除2,将余数逆序排列。
例:20
20%2=0;
10%2=0;
5%2=1;
2%2=0;
1%2=1;
所以最后按照逆序得出20的二进制数是10100。
乘二取整法(应用于小数):将小数部分辗转相乘2,直到小数部分为0将乘积的个位数部分正序排列。
例:20.75
首先根据上例可以知道整数部分利用除二取余可得二进制10100。现在利用乘二取整法对小数进行转化。
20.75-20=0.75
0.75*2=1.5 1 1.5-1=0.5
0.5*2=1 1 1-1=0
所以得出小数部分二进制位11,所以也就可以得出20.75的二进制数为10100.11。
2.关于八进制与二进制十进制之间的转化。
首先看看八进制如何转换成十进制,按权相加,将每位的数乘以8,然后相加起来。
例:八进制数75.18
=7*8^1+5*8^0+1*^8^-1+8*8^-2
=56+5+0.125+0.015625
=61.140625
然后是十进制转换成八进制,有两种办法,一种和十进制转换成二进制的除二取余类似,现在我们要进行的是除八取余。
例:十进制数64
64%8=0
8%8=0
1%8=1
所以得出八进制数为100。
然后是小数部分,依然类似于乘二取整。
例:0.0001
0.0001*8=0.0008 0
0.0008*8=0.0064 0
0.0064*8=0.0512 0
0.0512*8=0.4096 0
0.4096*8=3.2768 3
0.2768*8=2.2144 2
0.2144*8=1.7152 1
。。。
所以0.0001的八进制数是0.0000321。。。
另一种方法就是先把十进制数转换成二进制数,然后再把二进制数转换成八进制数。
首先把十进制数转换成二进制数,方法由上,然后把二进制数转换八进制数,对照图如下:
依次对照,然后用八进制表示,
例:562.125
562的二进制转换为1000110010然后对照表可以得到八进制数1062
0.125的二进制转换为0.001然后按照对照表可以得到八进制数0.1
最后得到562.125的八进制数为1062.1
3.十六进制与其他几种进制的转换
首先看这张图
这张图能够看出十六进制与其他进制数的对应情况。
最主要的是十六进制与二进制的对应,所有的我们都可以通过间接的方法来进行十六进制与其他进制之间的转换。
十进制转换十六进制:
首先将十进制数转换成二进制数,然后把二进制数对应十六进制数
100-->1100100-->01100100-->64
十六进制转换八进制也是将十六进制数先转换成二进制,再转换成八进制数。
十六进制转换十进制:
例:2A4E
2*16^3+10*16^2+4*16^1+14*16^0=10830
这个就类似于加权展开求和。以上就是各种进制之间的转换,在此个人觉得二进制属于一个中间的媒介,大多数都可以利用间接的转换二进制,再转换的方法去做。
4.C语言中各种进制
C语言中一般的整数常量皆为十进制类型,在C语言中,需要专门的前缀进行指明哪一种进制,前缀0X或0x表示十六进制,前缀0用于表示使用八进制,不同的数制系统的选择是为了方便而提供的,不影响数字的存储。无论怎么样,皆在计算机内部使用二进制编码进行存储。
在C中,要显示三种数制,%o表示显示八进制,%x表示显示十六进制,要想显示前缀,可以使用说明符%#o,%#x和%#X分别表示生成0、0x、0X前缀。