C语言中常用的进制及其转换方式

C语言中常用的进制及其转换方式

进制的简介:
(有关进制详细的知识点,读者可以查阅有关进制的详细资料,这里只介绍C语言常见的几种进制十六进制,十进制,八进制,二进制)

  • 十进制
    十进制在我们生活中随处可见,也是运用最为广泛的;十进制数中每一位的取值范围只能是0~9,基数是10;如果某一位超过9,则必须用多为数进行表示(逢10进一)。
    列如:1+9=10;2+8=10;17+3=20。
    再者:434 = 4×10² + 3×10¹ + 4×10º
    由该列子,不难看出一个规律:一个最高位为100的十进制数,可以由百位数乘以10的2次方 加 十位乘以10的1次方 加 个位乘以10的0次方得到。(小数点后的第一位,可以由该位置的数乘以10的-1次方得到…以此类推)

  • 八进制
    对于八进制来讲,实际用到的地方并不多,通过对十进制的了解。八进制的道理也是一样的,八进制的取值范围只能是0~7,中取一位。并且基数是8,其中高位和相邻地位之间的运算关系遵守逢八进一的原则,故称为八进制。八进制数在没有特别声明的情况下,通常以0(不是字母o)开头。
    列如:023,045等
    错误示范:o31,028,081
    八进制之间的计算:031+3 = 034,045+5=052,023+01 = 024

八进制转换成十进制:
031 与之等价的十进制数可以表示为:3×8¹+1×8º = 十进制数 :25(注:若八进制后有小数点,则小数点后一位就可以表示为该位置上的数乘以8的负一次方)
02345与之等价的十进制数可以表示为:2×8³+3×8²+4×8¹+5×8º = 十进制数:1253

十进制转换为八进制:
由八进制转换成十进制的规律可以得出,十进制转换为八进制可以这样表示
与十进制数18等价的八进制数为:18÷8 (取商和余数,若余数大于8,则继续除8) = 22
计算原理

18 ÷ 8
商:2
余:2
从下往上取,得:22

列如:

63÷8
商:7
余:7
从下往上取得:77

注意:当十进制数a大于或等于64时,所取得的八进制数将以(a-64)÷8取余的二进制来表示。

如:
十进制64当其被转换为8进制时,将表示为:100
计算原理:
64÷8
商:7(八进制最高取7),当取7之后,余数大于7的,都把该余数以二进制的形式显示。
余:8
这个时候,将不能对十进制数进行除八取余的操作,
剩余的余数就以二进制方式表示:故为:100
《代码验证:
include stdio.h(此处由于书写编译器,省略了包含stdio.h的尖括号<>)
int main(int argc,char *argv[])
{
int a=72;
printf(“64=%o\n”,a);
getchar();
return 0;
}

  • 二进制

目前在各个领域中应用非常广泛的一种进制数就是二进制,在二进制中,每一位只能从0和1取,基数是2;其中高位和地位之间的运算关系遵守“逢二进一”,故称为二进制。
列如:1010010101,101,10001。注:01既可以表示二进制1,也可以表示八进制1(可以查阅《进制表》“百度文库“进行查看)
二进制转换为十进制:与以上八进制转换为十进制同理,
1011与之对应的十进制数可以表示为:1×2³+0×2²+1×2¹+1×2º=十进制数:11(若有小数点,也是同八进制的道理一样)

十进制转换为二进制:
与八进制所对应的十进制大同小异,差距就是十进制转换为二进制时,只有余数为1时才停止除二取余操作。

列如:
十进制数:32 ,与之对应的二进制数可以表示为:100000
计算原理:
(32)
商:16
余:0
(16÷2)
商:8
余:0
(8÷2)
商:4
余:0
(4÷2)
商:2
余:0
(2÷2)
商:1
余:0
(1÷2)
商0
余1
由下往上分别取余数,得:100000

二进制转换为八进制:
因为2³为八,所以二进制转换为8进制时,三位二进制表示一位八进制。(从二进制的右边开始数,每三位二进制表示一位八进制,当最左边的二进制数不足三位时,在其左边填0补齐三位二进制)

列如:
10101010对应的八进制为:0252
转换原理:
10101010可以这样拆分
010 101 010
分别把上面的二进制转换为十进制:
010 = 0×2² + 1×2¹ + 0×2º = 2
101 = 1×2² + 0×2¹ + 1×2º = 5
010 = 0×2² + 1×2¹ + 0×2º = 2
即:
010 101 010
–↓—–↓—-↓—
—2 — 5 — 2
从左往右取得到八进制数:252

八进制转换为二进制:
由上面的列子可知,如果想要由八进制转换为二进制,我们就只需要把八进制都给拆分为一个或多个十进制数,然后将它们转换为二进制组合即可。

列如:
八进制数:32所对应的二进制数为:011010
转换原理:
32可以拆分为十进制数3和2(注意:拆分后计算,组合时必须按照拆分数的顺序组合)
十进制3转换为二进制数:11(我省略了转换步骤,上面已经讲过。)
十进制数2转换为二进制数:10
即:
3 2

011(不足三位,在其最左边加0补齐)
32
–↓
010
从左往右组合的得:011 010


  • 十六进制
    十六进制数的每一位有16个不同的数码,分别用0~9,A或a(10),B或b(11),C或c(12),D或d(13),E或e(14),F或f(15),表示,在没有任何说明的情况下,十六进制数以小写0x,或大写0X开头。并且基数是16,其中低位和高位之间运算关系尊“逢十六进一”,故称为16进制。
    十六进制转换为十进制的原理和上面的俩种进制的原理都是一样的

列如:0x32所对应的十进制数为:50
计算原理:
0x32转换为十进制:3×16¹+2×16º= 48+2 =50
十六进制转换为二进制
与八进制转换为二进制原理相通,因为2的4次方等于16,所以当十六进制转换为二进制时,拆分十六进制的每一位数字(拆分后按照10进制来计算),然后将其以十进制转换为二进制的方式把拆分的每一个十六进制数分别转换为二进制数,然后按照从左到右来组合每一个四位的二进制数
列如:
0x32所对应的二进制数为:00110010
转换原理:
将0x32拆分为十进制数3和2 ,然后按照十进制转换为二进制的方式将其转换为二进制数,差别在当转换为二进制后,不足四位二进制的,要在对应的二进制后面加0补齐四位;
3拆分后:11
2拆分后:10
因为需要转换的目标进制是十六进制
所以:
3对应的十六进制为:0011
2对应的十六进制为:0010
即:
32

0011 (3对应的十六进制数)
32
–↓0010 (2对应的十六进制数)
从左到右进行组合得:00110010

关于二进制转换为十六进制
原理和二进制转换为八进制相同,差距就在与,二进制转换为十六进制时,是四位二进制数表示一位十六进制数;这里留给读者自己思考。

关于十六进制转换为八进制
这需要先将十六进制数转换为二进制数,再由二进制数转换为八进制数即可;当然也可以将十六进制转换为十进制,再抓换为八进制;方式很多,读者要多去实践和思考。


十分感谢您的阅读!!

原创作品,如果您能够提出宝贵的意见或补充,本人将感激不尽!!!

猜你喜欢

转载自blog.csdn.net/qq_42667792/article/details/81517582