一、前言
欢迎小伙伴们光临寒舍!!如果本文有帮助还请小伙伴们点个小小的赞和关注,谢谢!!
C语言中有许多的数据结构和类型,其中最常用也是最重要之一的就是整数,而在整数中,我们最常见的就是有关于整数的进制问题。同时,整数的进制转化也往往牵涉到数字电路的逻辑设计里面,二者是融会贯通的。
以下是详细的讲解:
二、整数的进制
1. 整数常见有四种进制:
- 二进制整数(表示符号为 b 或 B)
- 十进制整数(表示符号为 d 或者D)
- 八进制整数(表示符号为 o 或者 O)
- 十六进制整数(表示符号为 h 或者H)
进制都是从0开始,即十进制为0~9,十六进制为0~15(因为从十开始就为两位数,所以开始有一位的字母进行代替)。
10 = a(A);11 = b(B);以此类推;15 = f(F)不区分大小写
本质:n进制,即数字满n则向前面一位进1,本位变为0。
2. 进制间的转换:
1.十进制,十六进制 和 八进制 转化为二进制:
十六进制数,十进制数 和 八进制数 转换为 二进制数 时,只需将十六进制数,十进制数 和 八进制数 的每一位用等值的 二进制数 代替就可以了。
例如:(3A.2)16 = 00111010.0010 =(00111010.0010)2
(23)10 = 00100011 = (00100011)2
(23)8 = 010011 = (010011)2
( 16,10,8和2是小下标,表示进制 )
2. 二进制 转化为 十六进制,十进制 和 八进制:
所以对二进制 转化为 十六进制,十进制 和 八进制,其实就是以上运算的逆运算:
以十六进制为例:
由于4位二进制数正好能表示1位十六进制数,因而可将4位二进制数看作一个整体。当工进制数转换为十六进制数时,以小数点为界,整数部分自右向左每4位一组,不足则前面补0,小数部分从左向右每4位一组,不足则后面补0,并代之以等值的十六进制数,即可得到相应的十六进制数。
例如: (1111110.11)2=01111110. 1100 =(7E.C)16
总结来说:
以右往左为位数顺序,
十六进制 和 十进制 以四个位为一个单位进行转化;
而对于 八进制,以三位为一个单位进行转化,也就是如上例子(23) 对八进制与十进制转化不一样的原因。
此外,二进制 与 十进制 间的相互转化还有一种方法,算法与十六进制转十进制相同,如下:
3. 二进制 和 十六进制 转化为 十进制:
将二进制数 或者 十六进制数 转换成等值的 十进制数,只要将二进制数 或 十六进制数的每位数码乘以权,再按十进制运算规则求和,即可得到相应的十进制数。
例如:(1011.101)2 = 1x2^3+0x2^2 +1x2^1 +1x2^0+1x2^(-1)+0x2^(-2)+1x2^(-3)
=(11.625)10
(AC3.8)16 = 10 ×16^2 + 12 ×16^1+3×16^0+8×16^(-1)
= (2755.5)10
4. 十进制 转化为 十六进制 和 二进制:
将十进制数转换成二进制数和十六进制数,需将十进制数的整数部分和小数部分分别进行转换然后将它们合并起来。
1)整数的转换:
整数转换采用“除基取余”法:
先将十进制数不断除以将要转换进制的基数,再对每次得到的商除以要转换进制的基数,直至商为0然后将各次余数按倒序列出,即第一次的余数为要转换进制帮数的最低有效位,最后一次的余数为要转换进制整数的最高有效位,所得的数值即为等值要转换进制整数:
2)小数部分的转换:
小数部分的转换采用“乘基取整”法:
先将十进制小数不断乘以将要转换进制的基数,积的整数作为相应的要转换进制小数,再对积的小数部分乘以要转换进制的基数、直至小数部分为0.或达到一定精度为止。第一次积的整数为要转换进制小数的最高有效位,最后一次积的整数为要转换进制小数的最低有效位,所得的数值即为等值要转换进制小数: