购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 数制与数制的转换

数制就是数的进位制 。在日常生活中,人们经常会接触到0、7、8、9、168、295等数字,它们就是一种数制——十进制数。另外,数制还有二进制数和十六进制数等。

2.1.1 十进制数

十进制数有以下两个特点:

1)有10个不同的数码 :0、1、2、3、4、5、6、7、8、9。任意一个十进制数均可以由这10个数码组成。

2)遵循“逢十进一”的计数原则 。对于任意一个十进制数 N ,它都可以表示成

N = a n -1 ×10 n -1 + a n -2 ×10 n -2 +…+ a 1 ×10 1 + a 0 ×10 0 + a -1 ×10 -1 +…+ a -m ×10 -m

式中, m n 为正整数。

这里的 a n -1 a n -2 ,…, a -m 称为数码,10称作基数,10 n -1 ,10 n -2 ,…,10 -m 是各位数码的“位权”。

例如,根据上面的方法可以将十进制数3259.46表示成3259.46=3×10 3 +2×10 2 +5×10 1 +9×10 0 +4×10 -1 +6×10 -2

2.1.2 二进制数

1.二进制数的特点

二进制数有以下两个特点:

1)有两个数码:0和1 。任何一个二进制数都可以由这两个数码组成。

2)遵循“逢二进一”的计数原则 。对于任意一个二进制数 N ,它都可以表示成

N = a n -1 ×2 n -1 + a n -2 ×2 n -2 +…+ a 0 ×2 0 + a -1 ×2 -1 +…+ a -m ×2 -m

式中, m n 为正整数。

这里的 a n -1 a n -2 ,…, a -m 称为数码,2称作基数,2 n -1 ,2 n -2 ,…,2 -m 是各位数码的“位权”。

例如,二进制数11011.01可表示为(11011.01) 2 =1×2 4 +1×2 3 +0×2 2 +1×2 1 +1×2 0 +0×2 -1 +1×2 -2

2.二进制数的四则运算

(1)加法运算

加法运算法则是“逢二进一” ,即遇到“1+1”时就向相邻高位进1。举例如下:

0+0=0 0+1=1 1+0=1 1+1=10

例如,求(1011) 2 +(1011) 2 ,可以用与十进制数相同的竖式计算:

即(1011) 2 +(1011) 2 =(10110) 2

(2)减法运算

减法运算法则是“借一当二” ,即遇到“0-1”时,需向高位借1当“2”用。举例如下:

0-0=0 1-0=1 1-1=0 0-1=1

例如,求(1100) 2 -(111) 2 ,有

即(1100) 2 -(111) 2 =(101) 2

(3)乘法运算

乘法运算法则是“各数相乘,再作加法运算” 。举例如下:

0×0=0 1×0=0 0×1=0 1×1=1

例如,求(1101) 2 ×(101) 2

即(1101) 2 ×(101) 2 =(1000001) 2

(4)除法运算

除法运算法则是“各数相除,再作减法运算” 。举例如下:

0÷1=0 1÷1=1

例如,求(1111) 2 ÷(101) 2

即(1111) 2 ÷(101) 2 =(11) 2

2.1.3 十六进制数

十六进制数有以下两个特点

1)有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。

2)遵循“逢十六进一”的计数原则 。对于任意一个十六进制数 N ,它都可以表示成

N = a n -1 ×16 n -1 + a n -2 ×16 n -2 +…+ a 0 ×16 0 + a -1 ×16 -1 +…+ a -m ×16 -m

式中, m n 为正整数。

这里的 a n -1 a n -2 ,…, a -m 称为数码,16称作基数,16 n -1 ,16 n -2 ,…,16 -m 是各位数码的“位权”。

例如,十六进制数可表示为(3A6.D) 16 =3×16 2 +10×16 1 +6×16 0 +13×16 -1

2.1.4 二进制数与十进制数的转换

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

二进制数转换成十进制数的方法是:将二进制数各位数码与位权相乘后求和,就能得到十进制数

例如,(101.1) 2 =1×2 2 +0×2 1 +1×2 0 +1×2 -1 =4+0+1+0.5=(5.5) 10

2.十进制数转换成二进制数

十进制数转换成二进制数的方法是:采用除以2取余法,即将十进制数依次除以2,并依次记下余数,一直除到商数为0,最后把全部余数按相反次序排列,就能得到二进制数。

例如,将十进制数(29) 10 转换成二进制数,方法为

即(29) 10 =(11101) 2

2.1.5 二进制数与十六进制数的转换

1.二进制数转换成十六进制数

二进制数转换成十六进制数的方法是:从小数点起向左、右按4位分组,不足4位的,整数部分可在最高位的左边加“0”补齐,小数点部分不足4位的,可在最低位右边加“0”补齐,每组以其对应的十六进制数代替,将各个十六进制数依次写出即可。

例如,将二进制数(1011000110.111101) 2 转换为十六进制数,方法为

注意:十六进制的16位数码为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、1001、1010、1011、1100、1101、1110、1111相对应。

2.十六进制数转换成二进制数

十六进制数转换成二进制数的过程与上述方法相反。具体为:从左到右将待转换的十六进制数中的每个数依次用4位二进制数表示。

例如,将十六进制数(13AB.6D) 16 转换成二进制数,方法为

2.1.6 单片机中数的表示及运算

单片机中的数是以二进制表示的,分为有符号数和无符号数两种。

1.有符号数的表示方法

有符号数是指有“+(正)”“-(负)”符号的数。由于单片机采用二进制数,所以只有1和0两种数字,用“0”表示“+”,用“1”表示“-” 。单片机中的数据一般只有8位,一般规定最高位为符号位,因为要用1位表示数的符号,所以只有7位用来表示数值,可以表示-127~+128。

有符号数的表示方法有3种:原码、反码和补码 。同一有符号数,用3种表示方法得到的数是不同的。下面用3种方法来表示两个有符号数+1011101和-1011101。

(1)原码

用“1”表示“-”,用“0”表示“+”,其他各数保持不变,采用这种方法表示出来的数称为原码。

+1011101用原码表示是01011101,可写成[01011101]

-1011101用原码表示是11011101,可写成[11011101]

(2)反码

反码是在原码的基础上求得的。对于正的有符号数,其反码与原码相同;对于负的有符号数,其反码除符号位与原码相同外,其他各位数由原码各位数取反得到。

+1011101用反码表示是01011101,可写成[01011101]

-1011101用反码表示是10100010,可写成[10100010]

(3)补码

补码是在反码的基础上求得的。对于正的有符号数,其补码与反码、原码相同;对于负的有符号数,其补码除符号位与反码一致外,其他数由反码加1得到。

+1011101用补码表示是01011101,可写成[01011101]

-1011101用补码表示是10100011,可写成[10100011]

2.有符号数的运算

用原码表示有符号数简单、直观,但在单片机中,如果采用原码进行减法运算,需要很复杂的硬件电路;如果用补码,可以将减法运算变为加法运算,从而省去减法器而简化硬件电路。

例:用二进制减法运算和补码加法运算分别计算35-21。

① 二进制减法运算:35-21=00100011-00010101=00001110

② 用补码加法运算:先将算式转换成补码形式,即35-21=[+35]+[-21]=[00100011] +[10010101] =[00100011] +[11101010] =[00100011] +[11101011] ,再对补码进行二进制加法运算:

从上面的运算过程可以看出,补码的符号也参与运算。在8位单片机中,由于数据长度只能有8位,上式结果有9位,第9位会自然丢失,补码加法的运算结果与二进制减法的运算结果是一样的,都是00001110=14。

由此可见,用补码的形式进行运算,可以将减法运算转换为加法运算,运算结果仍是正确的,所以单片机普遍采用补码的形式表示有符号数。

3.无符号数的表示方法

无符号数因为不用符号位,8位全部用来表示数据,所以这种方法可以表示的数据范围是0~255。8位二进制数的不同表示方式的换算关系见表2-1。

表2-1 8位二进制数的不同表示方式的换算关系

从表2-1中可以看出,对于同一个二进制数,当采用不同的表示方式时,得到的数值是不同的,特别是大于10000000的有符号数。若想确切知道单片机中的二进制数所对应的十进制数是多少,先要了解该二进制数是有符号数还是无符号数,再换算出该二进制数对应的十进制数。 UAaKSSgE3ZlIdLSTEfA3HoPy99OQcyIdapmEwNWNQJqHQmuJnm7yCLxJdZ8+JVZd

点击中间区域
呼出菜单
上一章
目录
下一章
×