关于进制和进制转换的那些事
要理解进制和进制转换,首先需要理解数制系统。
数制系统包括:(计算机中常用的数制系统)
– 十进制数制系统(逢十进一)
– 二进制数制系统(逢二进一)
– 八进制数制系统(逢八进一)
– 十六进制数制系统(逢十六进一)
十进制二进制八进制十六进制
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010
日常生活中,我们还会经常碰到其他的数制系统,如60秒为1分钟(60进制)、12个月为1年(12进制)、4季为1年(4进制)。
我们整理一下数制系统的特点,相关的基本概念整理如下:
1.数字:如十进制中的0, 1, 2, 3, 4, 5,6, 7, 8, 9;二进制中的0, 1;16进制中的0-9, A, B, C, D, E, F
2.基数:数制所使用数字的个数。如二进制的基数为2。
3.位权:数制中某一位上的1所表示数值的大小(所处位置的价值)。
例如:
1、对于十进制的123,1的位权是100(102),2的位权是10(101),3的位权是1(100)。按权展开为:
(123)10 = 1 × 102 + 2 × 101 + 3 × 100
2、对于八进制的234,2的位权是64(82),3的位权是8(81),4的位权是1(80)
其他进制以此类推
进制之间的换算:
1、其他进制转十进制:按权展开
计算:(285)9 = ( ? )10
2 × 92 + 8 × 91 + 5 × 90 = 162 + 72 + 5 = 239
答案:(285)9 = (239)10
2、十进制转其他进制:短除法
(9527)10 = ( ? )8
答案:(9527)10 = (22467)8
(9531)10 = ( ? )16
(9531)10 = (253B)16
今后,碰到两个非10进制之间的转换时,就可以使用十进制作为中间跳板,进行分步计算。
3、其他进制(带小数)转十进制
(F8C.B)16 = ( ? )10
= F × 162 + 8 × 161 + C × 160 + B × 16-1
= 3840 + 128 + 12 + 0.6875
= 3980.6875
4、十进制转非十进制(带小数)
整数部分与上面相同,重点是小数部分(乘基取整法):小数乘以目标数制的基数,第一次相乘结果的整数部分为目的数的最高位,将其小数部分再乘基数依次记下整数部分,反复进行下去,直到小数部分为“0”,或满足要求的精度为止。
(3980.6875)10 = ( ? )16
– 0.6875 × 16 = 11
– 11 -> B
3980转成16进制位F8C,加上小数点后的B,最终就得到了下面的结果:
(3980.6875)10 = (F8C.B)16
“8421”转换法
根据二进制的原则“逢二进一”,我们把2的n次方列出分别是:
20 = 1
21 = 2
22 = 4
23 = 8
“8421”法的原理说白了就是一种凑数法,按2的n次方的值列出,根据不同的情况进行“凑数”。
** 一、对于二进制转换成十进制数 **
例如:二进制数1010转换成十进制数
(1010)2 = (1 × 8 + 0 × 4 + 1 × 2 + 0 × 1)10 = (10)10
** 二、对于十进制转换成二进制数 **
例:十进制数10转换成二进制数
因为10可以由8421中的8和2组成,所以凡是凑到的8和2下面都是1,没有凑到的就为0
8421 (10 = 8 + 2)↓
(1010)2
例:十进制数6转换成二进制数
8421 (6 = 4 + 2)
(0110)2
凡是凑到的4和2下面都是1,没有凑到的为0
例:十进制数28转换成二进制数
16 8421 (16 + 4 + 8 = 28)
1 1100
上面的数字凑到的位1,没有凑到的为0
(28)10 = (11100)2
** 三、对于十六进制和二进制数之间的转换 **
因为8+4+2+1=15,加上0正好是16进制,4位二进制数正好对应一位16进制数,一位16进制数也同样可以直接对应4位二进制数(8进制就是1位8进制对应3位二进制)
例:(1010110)2转换成16进制
先补齐成 0101 0110,4位二进制对应一个16进制数,即
(0 × 23 + 1 × 22 + 0 × 21 + 1 × 20) = (0 × 8 + 1 × 4 + 0 × 2 + 1 × 1) = (5)16
(0 × 23 + 1 × 22 + 1 × 21 + 0 × 20) = (0 × 8 + 1 × 4 + 1 × 2 + 0 × 1) = (6)16
最终得出:(1010110)2 = (56)16
例:(15C)16 = ( ? )2
=(0001 0101 1100)2
每位十六进制对应4位二进制,1、5、C所对应的二进制可以通过查阅上面给出的进制对应表很容易就得出了以上的结果。
老九学堂出品,转载请私信哦
对于文章内容有不理解的可以添加老九君个人QQ:614940318,请备注来自简书
老九学堂免费C、C++、Java课程地址:
https://study.163.com/courses-search?keyword=%E8%80%81%E4%B9%9D%E5%AD%A6%E5%A0%82