数制:也称为“计数制”,是用一组固定的符号和统一的规则来表示数值的方法。任何一个数制都包含两个基本要素:基数和位权。
基本概念:
数码:数制中表示基本数值大小的不同数字符号。例如:十进制中有10个数码:0、1、2、3、4、5、6、7、8、9
基数:数制中所使用数码的个数。例如:十进制使用的数码个数为 0-9 ,一共 10 个数码,所以十进制的基数为 10
位权:数制中每一固定位置对应的单位值(数制中某一位上的 1 所表示的数值的大小(所处位置的价值))。例如:对于十进制中数字 123,1 的位权是 100,2 的位权是 10,3 的位权是 1,对于 N进制数,整数部分第 i 位的位权为 N^(i-1) ,而小数部分第 j 位的位权为 N^-j。
十进制:逢 10 进 1
数码:0、1、2、3、4、5、6、7、8、9
基数:10
位权:对于 10.23 来说,1 的位权为 10 (10^1),0 的位权为 1 (10^0),2 的位权为 0.1 (10^-1),3 的位权为 0.01 (10^-2)
二进制:逢 2 进 1
数码:0、1
基数:2
位权:对于 10.11 来说,从左向右看,1 的位权 2 (2^1), 0 的位权 1 (2^0),1 的位权 0.5 (2^-1),1 的位权 0.25 (2^-2)
十六进制:逢 16 进 1
数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E
基数:16
位权:我这里就不啰嗦了,跟上面的类似,其中重点说明一下,A 表示的是数值为 10,B 为11,C 为12,D 为13,E 为 14
解释了这么多的概念有啥用呢?
对于十进制数字 123 来说,它的数值大小可以表示为:1 * 100 + 2 * 10 + 3 * 1 = 1 * 10^2 + 2 * 10^1 + 3 * 10^0
那么有人会问了,如果是小数呢?
对于十进制数字 0.25 来说,它的数值大小可以表示为:2 * 0.1 + 5 * 0.01 = 2 * 10^-1 + 5 * 10^-2 = 1 / (2 * 10^1 + 5 * 10^0)
通过上述表示,我们可以得到一个结论,一个数的实际数值 =(各个位置上的数值 * 对应位置的位权)之和
是不是很神奇呀? 那么我们知道了十进制的表示方法,对于二进制我们怎么处理是不是也很清楚了呢?
对于二进制数字 110 来说,它的数值大小可以表示为:1 * 4 + 1 * 2 + 0 * 1 = 1 * 2^2 + 1 * 2^1 + 0 * 2^0
那么知道了这些有啥用呢?我们可以做进制转换呀!!!
二进制转换为十进制
1100.11 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 + 1 * 2^-1 + 1 * 2^-2 = 8 + 4 + 0.5 + 0.25 = 12.75
十进制转换为二进制
100.25
先转整数部分
100 = 1 * 2^6 + 1 * 2^5 + 0 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 = 1100100(2)
再转小数部分
0.25 = 0 * 2^-1 + 1 * 2^-2 = 0.01(2)
所以 100.25 = 1100100.01(2)
这个是如何计算的呢?
100 % 2 = 0 100 / 2 = 50 50 % 2 = 0
50 / 2 = 25 25 % 2 = 1 25 / 2 = 12
12 % 2 = 0 12 / 2 = 6 6 % 2 = 0
6 / 2 = 3 3 % 2 = 1 3 / 2 = 1
1 % 2 = 1 1 / 2 = 0(结束)
所以 100 = 1100100(就是通过 % 运算后的结果,倒着书写下来)
0.25 * 2 = 0.5 0.5 % 2 = 0 0.5 * 2 = 1 1 % 2 = 1(结束)
所以 0.25 = 0.01(通过 % 运算后的结果,正着书写下来)
至于这个原理大家就应该很清楚是怎么一回事了?
解释一下:
100 = 1 * 2^6 + 1 * 2^5 + 0 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0
% 2 得到的是最后一个 0 * 2^0 项的系数 0
再用 100 / 2 就相当于降幂操作,将上述的表达式每个都进行降幂,就是 2^6 变为 2^5,然后再反复利用 % 运算和 / 运算就能得到每项的系数,然后把系数对应倒着写出来就得到了对应的二进制
0.25 = 0 * 2^-1 + 1 * 2^-2
* 2 进行升幂操作,此时 2^-1 变为 2^0,再进行 % 运算,得到 0 * 2^-1 项的系数 0,反复利用 * 运算 和 % 运算就能得到每项的系数,然后把系数对应正着写出来就得到了对应的二进制
二进制转八进制
111 010(2) = 72(8) 后右向左每三位构成一个八进制数
八进制转二进制
72(8) = 111 010(2) 从左向右每三位拆解成对应的二进制数
二进制转十六进制、十六进制转二进制是每四位进行转换
八进制转十六进制通过先八进制转二进制,再二进制转十六进制
任意进制转换,可以先转十进制,再通过十进制再转换!!!
感谢大家的浏览,如果有什么不清楚的地方可以在下方评论,我看到会一一作出回复,嘻嘻(*^_^*)