数值与数制,进制转换
一、数值与数制
数值就是数据的真值,怎么来记录某个数的值呢?就引出了数制的概念,也称计数制,根据计数规则和特点的不同,分为进位计数制和非进位计数制。
1) 非进位计数制:表示数值大小的数码与它在数中的位置无关或不采用进位原则的计数体制。
代表:罗马数字。(该计数制与计算机组成没直接关系,这里不讨论了,感兴趣可自行查阅)
2) 进位计数制:表示数值大小的数码与它在数中的位置有关,采用进位原则的计数体制。
代表:日常生活中的十进制,中国古人的天干、地支计年发,时间的60进制、12进制、24进制等等。
计算机:二进制,16进制和8进制是二进制的助记方式,看了后面的进制转换就理解这一点了。
所以在计算机世界里,一定要熟悉二进制!!!!
我们这里不是讲数学,其他的任意进制就不提了,这里只介绍计算机里用的最多的十进制、二进制、十六进制(八进制在计算机里用的也不多(例如Linux文件系统中文件的访问权限每一位对应一种rwx,3位二进制正好对应一位八进制,转换方式类似十六进制,可以用后面介绍的直接替换法),后面就不单独介绍了。
在进位计数制中有重要的两个概念:基数和位权。
1) 基数:表示某进位制所具有的数字符号的个数。
例如: 十进制的基数:0~9(10个符号);
二进制的基数:0~1(2个符号);
十六进制的基数:数字0~9,字母A~F(16个符号);
十进制与二进制和十六进制之间的对应关系如下表:

所谓进位计数制,从表里也能看出来,就是逢几进一,十进制是逢十进一,二进制是逢二进一,十六进制是逢十六进一。
2) 位权(简称权):表示某进位制的数中不同位置上数字的权重(基数^位权)。
例如:十进制数135.79,1的权重就是10^2,3的权重就是10^1,5的权重就是10^0,7的权重就是10^-1,9的权重就是10^-2;
二进制数101.1,从左到右1的权重分别是2^2、2^0 、2^-1;
十六进制数A7.C,A(相当于十进制的10)的权重就是16^1;7的权重就是16^0,C(相当于十进制的12)的权重就是16^-1;
有了基数和权的概念,进制计数的两种表示方式之间的关系就一目了然了:
1) 并列表示法:
如十进制数(4562)10、二进制数(01101111)2、十六进制数(A7BF)16, 也常用B代表二进制,H代表16进制(或前缀加0x),D代表十进制(没标注,默认是10进制)。
2) 多项式表示法:
如M进制数(N)M=dn-1(M)n-1十dn-2(M)n-2十…十d1(M)1十d0(M)0十d-1(M)-1十 d-2(M)-2十…十d-m(M)-m=

等号左边是它的并列表示法,右边是它的多项式表示法。
人类世界是十进制的,计算机是二进制的,我们要熟悉计算机里的数据表示形式,就要熟练掌握十进制与二进制之间的相互转换。
二、进制转换
1)任意进制转换为十进制(当然包括二进制和十六进制转换为十进制)的方法:
任意进制数按它自己的基数加权以十进制展开后,进行的十进制运算得到的结果就是它对应的十进制数制表示。
例如:二进制数1101.101转换为对应的十进制数,
(1101.101)2 =(1×2^3十1×2^2十0×2^1十1×2^0十1×2^-1十0×2^-2+1×2^-3)10
=(8+4十1十0.5+0.125)10 =(13.625)10
十六进制数1101.101转换为对应的十进制数,
(BD8.4)16 =(11×16^2十13×16^1十8×16^0十4×16^-1)10 =(2816十208十8十0.25)10 =(3032.25)10
2) 将十进制转换为二进制或十六进制
A. 基数乘除法:基数乘/除法分为基数乘法和基数除法两种,整数部分用除法,小数部分用乘法。
例如:(25.6875)10 =(?)2,(687.3)10=(?)16
整数部分除以2或16取余数,除到商为零为止,将每次得到的余数,按照小数点在头顶的顺序排列,什么意思呢?过程如下:
(25)10 =(11001)2

(678)10 =(2AF)16

小数部分乘以2或16取整数,乘到小数部分为零为止(有些时候达不到,只能取近似值,例如十进制0.32以二进制表示只能取近似),将每次得到的整数,按照小数点在头顶的顺序排列,过程如下:

综上:(25.6875)10 =(11001.1011)2,(687.3)10=(2AF.4CC……)16
B. 降幂法
适合数值较小的十进制数转换为二进制数,因为:
2^10 = 1024, 2^9 = 512, 2^8 = 256, 2^7 = 128, 2^6 = 64, ……
可将十进制数直接拆分成2的整数次幂求和式,从而得到对应的二进制数,例如:
(1234)10 = 1024 + 128 + 64 + 16+ 2 =2^10 + 2^7 + 2^6 + 2^4+ 2^1=(10011010010)2
3) 二进制与十六进制之间的转换---直接替换法
一位十六进制数对应4位二进制数:
十六进制0 1 2 3 4 5 6 7 8 9 A B C D E F
二进制0000 0001 0010 0011 0100 0101 0110 0111 1000 l001 1010 1011 1100 1101 1110 1111
例如:将二进制数1010110110.110111转换为十六进制数。

注意补零的位置:首尾补零。
所以 (1010110110.110111)2=(2B6.DC)16
例2.4 将十六进制数5D.6E转换为二进制数。

所以 (5D.6E)16=(1011101.0110111)2
最后要把首尾的零去掉。
本文只介绍计算机中常用的进制间转换方法,任意进制间转换(属于数学问题)的其他方法感兴趣的可自行查阅。
本文介绍的转化方法都是有数学证明的,本文只介绍怎么用,对原因感兴趣的可自行查阅。