2.1 无符号数的表示和运算
在计算机中,不仅数据是以二进制形式表示的,字母、符号、图形、汉字以及指令等都是以二进制形式表示的。
图像,声音,电影,都是由二进制信息组成的。
如何区分不同进位记数制的数字
在数字后面加一个字母进行区分:
2.各种数制的相互转换
① 任意进制数转换为十进制数的方法很简单,只要按其进制的多项式各位按权展开求和即可。
例 2.1将二进制数1101.11转换十进制数。
(1101.11)2=1´23+1´22+0´21+1´20+1´2-1+1´2-2
=23+22+20+2-1+2-2
=8+4+1+0.5+0.25=(13.75)10
② 十进制数转换为任意进制数的方法采用。
除R取余法(整数部分)
乘R取整法(小数部分)。
例 2.2将十进制数25.6875转换为二进制数和十六进制数。
225 取余:1 0.6875×2=1.375 取整:1
2 12 取余:0 0.375×2=0.75 取整:0
2 6 取余:0 0.75×2=1.5 取整:1
2 3 取余:1 0.5×2=1.0 取整:1
2 1 取余:1
0
1625 取余:9 0.6875×16=11.0 取整:11(B)
161 取余:1
0
故 25.6875对应的二进制数为11001.1011B。十六进制数为19.BH(注:箭头为取数方向。)
③十六进制和二进制之间的转换是非常简单的,只要按4位二进制数对应转换即可。方法是以小数点为界,整数部分自右至左,小数部分自左至右分组,二进制转换为十六进制,4位为一组,不足时补0。
例 2.3 将二进制数1101110.01011B转换为十六进制数,将十六进制数2F.1CH转换成二进制数。
【解】
1101110.11011B=0110,1110.1101,1000B=6E.D8H
2F.1CH=0010,1111.0001,1100B=101111.000111B
3. 二进制数的运算
(1)算术运算规则
加: 0+0=0 1+0=1
0+1=1 1+1=0(有进位)
减: 0-0=0 1-1=0
1-0=1 0-1=1(有借位)
乘: 0×0=0 1×1=1
1×0=0 0×1=0
除:1÷1=1 0÷1=0
(2) 逻辑运算规则
“与”(AND):
0∧0=0 0∧1=0 1∧0=0 1∧1=1
“或”(OR):
0∨0=0 0∨1=1 1∨0=1 1∨1=1
“非”(NOT):0=1 1=0
“异或”(XOR):
0⊕0=0 0⊕1=1 1⊕0=1 1⊕1=0
4. 无符号数的表示范围
一个n位的无符号二进制数X,其表示范围为
0 ≤X ≤ 2n-1
若运算结果超出这个范围,则产生进位或借位
11111111
+00000001
100000000
结果超出8位(最高位有进位),发生进位。(结果为256,超出8位二进制数所能表示的范围255)
2.2带符号数的表示及运算
符号位为 0表示正数,符号位为1表示负数
符号位:0表示正,1表示负;
数值位:真值的绝对值。
原码的例子
数0的原码
- 0 = 10000000
即:数0的原码不唯一。
定义
不变,数值部分按位求反
[X]原= 10110100
[X]反= 11001011
0的反码:
[+0]反= 00000000
[-0]反 = 11111111
即:数0的反码也不是唯一的。
定义:
[X]原 = 10110100
[X]反 = 11001011
[X]补 = [X]反+1=11001100
n位补码表示数值的范围是
对应的补码是100...0~011...1。
0 的补码:=1 00000000
对8位字长,进位被舍掉
3. 补码的运算
目前,计算机中通常用补码进行带符号数的运算。补码运算的规则为:
① [X]补±[Y]补=[X±Y]补
两数补码的和或差等于两数和或差的补码
② [[X]补]补=[X]原
补码再求补等于原码
4. 溢出及其判断方法
(1) 进位与溢出
进位:用来判断无符号数运算结果是否超出了计算机所能表示的最大范围,是指运算结果的最高位向更高位的进位。
溢出:用来判断带符号数运算结果是否超出了计算机补码所能表示的范围,是指带符号数的补码运算结果的溢出。
(2)溢出的判断方法
判断溢出的方法和多,常用的有:
① 观察法:通过观察参加运算的两数的符号及运算结果的符号进行判断,仅适用于手工运算。
② 双符号位法:通过运算结果的两个符号位的状态来判断结果是否溢出。
③ 单符号位法:通过符号位和数值部分最高位的进位状态来判断结果是否溢出。(也称双高位法)
当两个带符号的二进制数进行补码运算时,若运算结果的绝对值超过运算装置的容量,数值部分便会发生溢出,占据符号位的位置,从而引起计算错误。这和补码运算过程中的正常溢出(符号位的进位)性质上是不同的。因此,微型计算机中判断带符号数补码运算的溢出采用双高位进位判别法。假设用OF表示溢出,用CF表示最高为(符号位)的进位,用DF表示次高为(数值部分最高位)的进位,则有
OF=CF∨DF (或OF=CF⊕DF)
若OF=1说明结果溢出;若OF=0说明结果不溢出。也就是说,当符号位和数值部分的最高位同时有进位或同时无进位时,结果没有溢出,否则,结果溢出。
例 2.5 设有两个操作数x=01000100B,
y=01001000B,将这两个操作数送运算器做加法运算,试问:
① 若为无符号数,计算结果是否正确?
② 若为带符号数,计算结果是否正确?
【解】 ∵ 无符号数 带符号数
01000100 68 [+68]补
+ 01001000 +72 [+72]补
10001100 140 [-116]补
DF=1
CF=0
∴ ① 若为无符号数,由于CF=0(最高位向更高位的进位),说明结果未超出8位无符号数所能表达的数值范围(0~255),计算结果10001100B其真值为140,计算结果正确。
② 若为带符号数补码,由于CF⊕DF=1,结果溢出,运算结果不正确。其实不难看出,两个正数相加结果为负数,结果肯定不正确;原因是:+68和+72两补码之和应为+140的补码,而8位带符号补码所能表达的数值范围为-128~+127,结果超出该范围,溢出,所以结果是错误的。
例 2.6 设有两个操作数x=lllOlllOB,y=l1001000B,将这两个操作数送运算器做加法运算,试问:
① 若为无符号数,计算结果是否正确?
② 若为带符号补码数,计算结果是否溢出?
①若为无符号数,由于CF=1,说明结果超出8位无符号数所能表达的数值范围(0~255)。两操作数lllOlllOB和11001000B对应的无符号数分别为238和200,两数之和应为438>255,因此,计算结果是错误的。
②若为带符号数补码,由于CF⊕DF=0,结果未溢出。两操作数lll01110B和11001000B分别为-18和-56的补码,其结果应为-74的补码形式,而计算结果10110110B正是-74的补码,因此结果正确。
2.3信息的编码
信息的编码是计算机在进行人机交换信息时用到的信息(如数字、字母、符号等)的二进制编码。在计算机中常用的信息编码有两种:BCD码和ASCII码。
1. BCD编码(二进制编码的十进制数)
BCD码是用二进制编码表示的十进制数(Binary-CodedDecimal)。BCD码可分为两种:压缩型BCD码和非压缩型BCD码。
① 压缩型BCD码:是用一个字节表示两位十进制数(每个十进制数用4个二进制数表示);
② 非压缩型BCD码是用一个字节表示一位十进制数(一位十进制数占用低4位二进制数,高4位二进制数为0)。
例2.7 十进制数与BCD数相互转换
① 将十进制数69.81转换为压缩型BCD数:
69.81=(01101001.1000 0001)BCD
② 将BCD数10001001.0110 1001转换为十进制数:
(10001001. 0110 1001)BCD=89.69
例2.8 用BCD码求38+49=?
【解】 ∵
0011 1000 38的BCD码
+ 01001001 49的BCD码
10000001 81的BCD码(结果不对)
+ 00000110 06的BCD码(修正码)
10000111 87的BCD码(结果正确)
∴ 38+49=87
出错原因:十进制数相加是“逢十进一”,而4位二进制数相加相当于十六进制数相加是“逢十六进一”所以当相加结果超过9时将比正确结果少6,因此结果出错。
解决办法:对二进制加法运算结果采用“加6修正”,从而将二进制加法运算的结果修正为BCD码加法运算结果。
修正原则:
① 如果两位BCD码的运算的结果大于9且小于16,则进行加6修正,若小于9,则不修正;
② 如果两位BCD码的运算结果向高位有进位(即大于或等于16),则进行加6修正。
2. ASCII字符编码
ASCII码(AmericanStandard Code for Information Interchange—美国标准信息交换码):是用一个字节来表示一个字符,采用7位二进制代码来对字符进行编码,最高位一般为0。7位二进制代码能表示27=128种不同的字符,其中包括数字(0~9),英文大小写字母,标点符号及控制字符等,见教材P29表2.3。
2.4数的定点与浮点表示法
在计算机中,用二进制表示实数的方法有两种:即定点表示法和浮点表示法。
①定点表示法:是指小数点在数中的位置固定。通常将数据表示为纯小数(小数点在数值位和符号位之间)或纯整数(小数点在数值位的最后)形式。
② 浮点表示法:是指小数点在数中的位置是浮动的。通常浮点数的表示分为4部分:即尾数、数符、阶码和阶符。其中,尾数是二进制纯小数,指明数的全部有效数字;数符是一位二进制数,表示数的正负;阶码表示小数点移动的位数;阶符是一位二进制数,表示小数点移动的方向,阶符为0表示小数点向右移,为1表示向左移。阶码和阶符一起表示小数点的浮动位置。
1、 将十进制数转换为二进制和十六进制
(1) 129.75=1000 0001.11B=81.CH (2) 218.8125=1101 1010.1101B=DA.DH
(3) 15.625=1111.101B=F.AH (4) 47.15625=10 1111.0010 1B=2F.28 H
2、 将下列二进制数转换为十进制和十六进制
(1) 111010 B=58 =3AH (2) 1011 1100.111B= 188.875= BC.E H
(3) 0.1101 1B=0.84375 =0.D8H (4) 11110.01 B=30.25 =1E.4H
3、完成下列二进制数的加减法运算
(1) 1001.11+100.01=1110.00 (2) 1101010110.1001-01100001.0011=01110101.0110
(3) 00111101+10111011=11111000 (4) 01011101.0110-101101.1011=101111.1011
4、完成下列十六进制数的加减法运算
(1) 745CH+56DFH=D14B H (2) ABF.8H-EF6.AH=9C28.E H
(3) 12AB.F7+3CD.05=1678 .FC H (4) 6F01H-EFD8H=7F29 H
5、计算下列表达式的值
(1) 128.8125+10110101.1011B+1F.2H=101010101.1010B
(2) 287.68-10101010.11H+8E.EH=103.CEH
(3) 18.9+1010.1101B+12.6H-1011.1001=36.525
6、选取字长n为8位和16位两种情况,求下列十进制数的补码。
(1) X=-33的补码: 1101 1111, 1111111111011111
(2) Y=+33的补码: 0010 0001,0000 0000 0010 0001
(3) Z=-128的补码:1000 0000, 11111111 1000 0000
(4) N=+127的补码:0111 1111, 00000000 0111 1111
(5) A=-65的补码: 1011 1111, 11111111 1011 1111
(6) B=+65的补码: 0100 0001,00000000 0100 0001
(7) C=-96的补码: 1010 0000,11111111 1010 0000
(8) D=+96的补码: 0110 0000,00000000 0110 0000
7、写出下列用补码表示的二进制数的真值
(1) [X]补=10000000 0000 0000 H X=-1000 0000 0000 0000 H=-32768
(2) [Y]补=00000001 0000 0001 H Y=+0000 0001 0000 0001 H=+257
(3) [Z]补=11111110 1010 0101 H Z=-0000 0001 0101 1011 H=-347
(4) [A]补=00000010 0101 0111 H A=+0000 0010 0101 0111 H=+599
8、设机器字长为8位,最高位为符号位,试对下列格式进行二进制补码运算,并判断结果是否溢出。
(1) 43+8
∵ [43]补=00101011B,[8]补=00001000B
∴ [43]补+[8]补=00101011B+00001000B=00110011B=33H
00101011B
+ 00001000B
00110011B
∵ CS=0,CD=0,OF=CS⊕CD=0⊕0=0
∴ 无溢出
(1) 43+8 33H (无溢出) (2) -52+7 D3 H (无溢出)
(3) 60+90 96H (溢出) (4) 72-8 40 H (无溢出)
(5) -33+(-37) 0BA H (无溢出) (6) -90+(-70) 60 H (溢出)
(7) ―9―(―7) FE H (无溢出) (8) 60-90 E2 H (无溢出)
9、 设有变量x=11101111B,y=11001001B,z=01110010B,v=01011010B,试计算x+y=?,x+z=?,y+z=?,z+v=?,请问:① 若为无符号数,计算结果是否正确?② 若为带符号补码数,计算结果是否溢出?
x+y = 11101111B+11001001B=10111000B=1B8 H
11101111 B
+ 1100 1001B
1011 1000B
① 若为无符号数 ② 若为带符号补码数
∵ CF=1 ∴不正确 ∵ CF=1,DF=1 OF=0 ∴不溢出
x+y= 0B8 H x+z = 61 H y+z= 3B H z+v = 0CC H
① 不正确 不正确 不正确 正确
② 不溢出 不溢出 不溢出 溢出