为什么计算机中常用二进制(计算机里的二进制和十六进制是什么关系)
在讲解二进制数据之前,我们先来看看我们最常用的十进制数据。
从小学读书起,我们就开始学习数学,最简单的加法有:
5 3 = 8;
5 5 = 10;
10 16 = 26;
看到这样的加法算术很简单,它只有一个规则:
(1) 个位数与个位数相加,满10进1;
(2) 十位数与十位数相加,满10进1;
(3) 百位数与百位数相加,满10进1;
...
以此类推,这种规则表示的数,我们称为:十进制数;
表示十进制数的元素就有:
0,1,2,3,4,5,6,7,8,9
这样的10个数值;
所以,从我们最常见的算术开始,我们了解了十进制数。它的规则就是:满10进1;那么,根据这个规则,我们可以定义N进制数,它的规则就是:
(1) 表示N进制数的元素,有N个符号;
(2) 数据的表示,是满N进1;
二进制数据通过上一节的讲解,我们知道二进制就是由0和1组成的数字,它表示电子设备的打开和关闭状态。计算机中存储的任何数据都是二进制数据。
例如十进制3这个数值,在计算机中都表示成的二进制数据是11这样数值。如果十进制3这个数值存放到1个字节中,1个字节使用8位表示,那么,表示的数值是 0000 0011,所以,表示8位二进制数据。
根据上面提到N进制数规则,我们定义二进制数的规则是:
(1) 表示二进制数的元素有 2 个符号,就是0和1这两个数值;
(2) 二进制数的表示是满2进1;
知道了二进制数据的表示方法,那么,我们试着把十进制19这个数值的二进制数据写出来。
把十进制数据转换成二进制数据,使用的方法是:除2取余法,计算过程如下:
19/2 = 9余1
9/2 = 4余1
4/2 = 2余0
2/2 = 1 余0
1/2 = 0余1
除到商为0的时候停止;
然后,从最末尾的余数开始往上取,得到10011这个二进制数据。所以,十进制19这个数值的二进制数据就是10011。如果把十进制19这个数值存放到1个字节的变量中,那么,在1个字节的内存中表示为0001 0011,因为1个字节是8位,上面我们求出10011二进制数据占据了5位,那么,剩下的高3位没有数据填充,所以,填充0值。
所以,我们可以总结十进制转二进制的方法:
(1) 采用除2取余法;除到商为0的时候停止。
(2) 余数从下往上取;
(3) 高位补零;
现在我们试着把二进制转换为十进制。在转换之前,我们先看看十进制表示的一个例子。例如189这样的一个数值,在数值序列中,从右边开始算起,从0开始计算,就有:
9在第0位,8在第1位,1在第2位,那么,就可以表示为:
1*10^2 8*10^1 9*10^0 = 100 80 9 = 189
那么,是十进制表示,所以,基数为10,例如第2位,就有10^2 表示10的2次方,就是10*10,这就是第2位的权重值;注意:在数学计算中,任何数的0次方,都等于1。 所以有:
1*10^2 8*10^1 9*10^0
= 1*100 8*10 9*1
= 100 80 9
= 189
所以,我们可以总结N进制数值的表示算法:
(1) 每个位置上的数值,与权重值相乘,然后求和;
(2) 权重值是N^x,表示N的x次方,x是数值在数值序列上的位置;位置从右边开始算,从0开始;
同理,我们就把10011这个二进制转换为十进制,也是使用相同的算法。
把10011这个数值序列解开,从右边开始计算,第0位是1,第1位是1,第2位是0,第3位是0,第4位是1;
那么是二进制表示,所以,基数为2,例如第3位,就有2^3的权重,就有:
1*2^4 0*2^3 0*2^2 1*2^1 1*2^0
= 16 0 0 2 1
= 19
所以,我们把19这个十进制转换成了10011二进制数据,再把二进制数据转换为十进制数据。
再多举一个例子,把18 这个数值转换为二进制表示,有:
18/2 = 9 余 0
9/2 = 4 余 1
4/2 = 2 余 0
2/2 = 1 余 0
1/2 = 0 余 1 //除到商等于0的时候,停止计算;
然后,从下往上取余数,得到10010二进制数据。然后,10010二进制转换为十进制数据,有:
1*2^4 0*2^3 0*2^2 1*2^1 0*2^0
= 16 0 0 2 0
= 18
通过这些例子的分析,我们讲解了二进制的表示形式和二进制与十进制数值间的相互转换。
十六进制数据在介绍十进制数的时候,我们已经定义了N进制数,它的规则就是:
(1) 表示N进制数的元素有N个符号;
(2) 满N进1;
那么,十六进制数就是有16个符号表示,如下:
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
其中字符A表示10数值,字符B表示11数值,字符C表示12数值,字符D表示13数值,字符E表示14数值,字符F表示15数值。注意:这个字符,也可以使用小写字符a、b、c、d、e、f表示。
在学习二进制数据的时候,我们知道,把一个十进制数据转换N进制数据,采取除N取余法。所以,把一个十进制数据转换为十六进制,就是采取:除16取余法。例如,把十进制数18这个数值,转换为16进制,有如下的计算:
18/16 = 1 余 2
1/16 = 0余1
然后,从下往上取余数,得到十六进制数12这样的数值。但是,我们有些疑惑,当我们看到12这个数值的时候,如果不表明是十六进制,我们可能会认为是十进制数据。
所以,在计算机系统中,我们定义十六进制数,使用0x前缀表示。所以,上面计算出来的十六进制数据就可以表示为0x12。当我们看到一个数值,如果是以0x开头,就表示这个数据是十六进制数据。
那么,我们把十六进制数0x12数值,转换为十进制数,算法与二进制转换为十进制数一样。对于0x12数值序列,第0位是2,第1位是1,所以有:
1*16^1 2*16^0
= 16 2
= 18
此时,就可以把十六进制0x12数值对应的十进制计算出来了。我们再计算一个例子,计算十进制是169的数值,转换为十六进制,有:
169/16 = 10 余 9
10/16 = 0 余 10
其中,十进制10数值使用十六进制字符A表示,所以,得到的十六进制数是0xA9。注意,对于10~15的数值,在十六进制中,使用字符A~F(或者小写字母a~f)进行表示。例如十进制15这个数值,使用十六进制表示,就是0xF。
现在,我们把0xA9这个十六进制转换为十进制,计算方式如下:
A*16^1 9*16^0
= 10 * 16 9 * 1
= 160 9
= 169
注意,在计算的时候,十六进制的字符A表示十进制的10这个数值。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com