hello,csdn小伙伴们大家伙,为了读者能够更流畅的阅读即将出炉的《初识C语言(终幕)》这篇文章,本期我们先来学习一下进制转换的内容,作为下节内容的预备知识。
我们平时中所用的数均为十进制数,但是在计算机中, 我们还需要了解二进制数,八进制数,十六进制数的概念以及互相转换。
一、十进制数
数制是计数进位制的简称。生活中我们常用的是十进制数。在十进制数中,我们采用0,1,2……9,10等数码,在计数时,我们逢十进一和借一当十,各个数码处于十进制时,所代表的数值十不同的。例如,555的数值是5*100+5*10+5*1,其中最高数码的5代表500,中间代表50,最低位代表5。
我们将100,10,1成为位权值。十进制的各个数位的权值都是10的幂。10称作十进制数的基数。因此对于任何一个十进制数,我们都可以按照位权展开
举几个例子
1153=1*1000+1*100+5*10+3*1=1153
135=1*100+3*10+5*1=135
二、二进制数、八进制数、十六进制数
在了解了十进制数以后二进制数。我们可以使用类比的思想,不难得出二进制数,八进制数,十六进制数的基本概念。
二进制数: 逢二进一,借一当二 每一个数码的范围是0~1,基数为2,各权值为2的幂
八进制数: 逢八进一,借一当八 每一个数码的范围是0~7,基数为8,各权值为8的幂
十六进制数:逢十六进一,借一当十六,每一个数码的范围是0~f(10用a代替,11用b代替,……,15用f代替),基数为16,各权值为16的幂
他们的位权展开也可以由10进制数类比得出
二进制数1101.01=1*2^3+1*2^2+0*2^1+1*2^0+0*2^-1+1*2^-2
八进制数7513=7*8^3+5*8^2+1*8^1+3*8^0
十六进制数fa5=15*16^2+10*16^1+5*16^0
这就是他们的位权展开了
三、进制之间的相互转化
1.二进制数、八进制数、十六进制数转化为十进制
这里直接给出结论
二进制数,八进制数,十六进制数的位权展开的结果就是对应的十进制数
2.十进制化为二进制、八进制、十六进制、任意(R)进制数
本节仅仅探讨整数部分
①将十进制数除以R(R为对应的进制),余数作为R进制数的最低位
②再把①所得的商除以R,余数作为次最低位
③重复②,直到商为0,最后的余数即为R进制的最高位
例如,将53化为二进制数
3.二进制数化为八进制数,十六进制数以及逆转换
(1)通过十进制数,作为桥梁,进行互相转化
此种方法比较暴力,但计算量过于复杂,及其容易出错,不建议使用
(2)通过基数的规律进行转换
二进制数化为八进制数,十六进制数,其实有一个规律,我们可以发现,二进制数中的一个基数为2,八进制数的一个基数为8,也就是2的三次方,16进制数的一个基数为16,为2的四次方
那么我们便不难得出,三位二进制数,可以转换为八进制数,四位二进制数,可以转化为一位十六进制数,这样的化八进制数和十六进制数之间可以通过二进制数作为桥梁进行转换。
下面这是二进制数110 101.011 000 111转化为八进制数的简便方法
同理转化为十六进制数是这样的
总结
本外传主要了解一下各个进制数之间的互相转换的方法
要注意:同一个数可以有二进制数,八进制数,十进制数,十六进制数等多种存在形式。但他们仅仅只是形式不同,只要他们的位权展开值相同,那无论他们的形式如何他们的本质都是同一个数,这一点类似与在前文提到的0和\0的区别,他们形式不同,但本质相同