Logo

郎哥编程

不得不说的二进制和十六进制

2017-12-22 1253

计算机能够识别的数制是二进制数,二进制数是用0和1两个数字来表示的数,计算机的指令集也是采用二进制表示,机器语言就是用二进制数编写程序。

可以借助十进制数来理解二进制数。在十进制中,每一位有0、1、2、3、4、5、6、7、8、9十个数码,因此基数为10,超过9就必须用多位数来表示,并遵循逢十进一的原则。一个任意的十进制数可以表示为:

000a1.png

其含意是:

002.png

其中ai(i=0,1…,n),bj(j=1,2,…,m)是0、1、2、3、4、5、6、7、8、9十个数码中的一个。

上式中相应于每位数字的10n称为该数字的权,其大小是以基数为底,数码所在位置的序号为指数的整数次幂,每位数字乘以其权所得的乘积之和即为所表示数的值。

例如:

003.png

十进制是人们最熟悉、最常用的一种数制,但它不是唯一的数制。例如计时用的时、分、秒就是按60进制计数的。基数为r的r进制数可以表示为:

006.png

二进制和十六进制数

计算机就其本身来说是一个电器设备,为了能够快速存储、处理、传递信息,其内部采用了大量的电子元件,在这些电子元件中,电路的通和断、电压高低,这两种状态最容易实现,也最稳定、也最容易实现对电路本身的控制。计算机工程师将计算机所能表示这样的状态,用0,1来表示、即用二进制数表示计算机内部的所有运算和操作。二进制数运算非常简单,计算机很容易实现,所以计算机内部都用二进制编码进行数据的传送和计算。

二进制的基数为2,只有0、1两个数码,并遵循逢二进一的原则,它的各位权是以2k表示的,因此二进制数008png.png的值为:

007.png

其中ai,bj为0、1两个数码中的一个。例如:

009.png

其中数的下标表示该数的基数r,即二进制的101101与十进制的45等值。

n位的二进制数可以表示2n个数。例如:3位二进制数可以表示8个数,分别是:

二进制数    相对应的十进制数
000          0
001          1
010          2
011          3
100          4
101          5
110          6
111          7

而4位二进制数则能表示十进制的0 ~ 15共16个数如下:

二进制数    相对应的十进制数
0000          0
0001          1
0010          2
0011          3
0100          4
0101          5
0110          6
0111          7
1000          8
1001          9
1010          10
1011          11
1100          12
1101          13
1110          14
1111          15

为了方便阅读及书写,经常使用十六进制来表示二进制数,十六进制的基数是16,数码为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其中用A,B,C,D,E,F(字母不区分大小写)这六个字母来分别表示10,11,12,13,14,15。

按同样的方法,可以很容易地掌握十六进制数的表示方法。例如:

0010.png

在计算机编程语言中,通常用数字后面跟一个英文字母来表示该数的数制。十进制一般用D(Decimal)、二进制数用B(Binary)、十六进制用H(Hexadecimal)来表示。例如:23AH、570D、110101B、0075H,…。当然也可以用这些字母的小写形式。

● 不同进制数的相互转换

计算机中采用的是二进制,但用计算机解决实际问题时对数值的输入输出通常使用十进制,这就有一个十进制向二进制转换或由二进制向十进制转换的过程。也就是说,在使用计算机进行数据处理时首先必须把输入的十进制数转换成计算机所能接受的二进制数;计算机在运行结束后,再把二进制数转换为人们所习惯的十进制数输出。

1、二进制数转换成十进制数  

 把二进制数转换成十进制数就是用“按权相加法”,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。

 例:把二进制数110.11转换成十进制数。 

0011.png

2、十进制数转换为二进制数 

前面“按权相加法”中,权的值在小数点左边和小数点右边是不一样的。所以,十进制数转换为二进制数时,整数和小数的转换方法也不同,一般先把十进制数的整数部分和小数部分分别转换后,再加以合并。

十进制整数转换为二进制整数采用"除2取余,逆排序"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把所有余数按逆序排列,也就是把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。这就是所谓“除2取余,逆序排列”。

例:将一个十进制数25转换为二进制数。

0012.png

                                             

3、十六进制和二进制之间的转换

由于十六进制的基数是2的幂,所以这两种数制之间的转换是十分容易的。一个二进制数,只要把它从低位到高位每4位组成一组,直接用十六进制数来表示就可了。

例:0011  0101  1011  1111 = 35BF

           3     5     B     F

反之,把十六进制数中的每一位用4位二进制数表示,就形成相应的二进制数了。

                A     1     9     C

例:A19C = 1010  0001  1001  1100

4、十六进制数转换为十进制数

同二进制数转换十进制数相同,各位十六进制数与其对应权值的乘积之和即为与此十六进制相对应的十进制数。

例:N = BF3CH

      0013.png

      =11*4096+15*256+3*16+12*1

      =48956D

十进制数转换为十六进制数也可使用除法进行。


■ 知识点拨

二进制数是逢二进位的进位制,0、1是基本算符,计算机运算基础采用二进制。编程过程中经常会用到十六进制,而十进制的使用非常少,这是因为十六进制和二进制有天然的联系:四个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成十六进制只要每4位进行转换就可以了。

■ 思考与练习

1、将下列二进制数转换为十六进制数和十进制数:

(1)10101   (2)10000000  (3)11111111

2、用除法将下列十进制数转换为二进制数和十六进制数:

(1)369    (2)10000   (3)4095

3、将下列十六进制数转换为二进制数和十进制数:

(1)FA     (2)5B     (3)F234


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论