龙空技术网

计算机里的二进制和十六进制是什么关系?

韦凯峰Linux编程学堂 195

前言:

现时你们对“二进制转十六进制关系表”可能比较重视,我们都想要了解一些“二进制转十六进制关系表”的相关资讯。那么小编也在网络上网罗了一些关于“二进制转十六进制关系表””的相关知识,希望看官们能喜欢,你们快快来了解一下吧!

十进制数据

在讲解二进制数据之前,我们先来看看我们最常用的十进制数据。

从小学读书起,我们就开始学习数学,最简单的加法有:

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这个数值。

标签: #二进制转十六进制关系表