无符号数和有符号数
无符号数
寄存器的位数:反映无符号数的表示范围
有符号数
注:以下表示法中x为真值,n为整数位数
- 原码表示法
- 整数
- 小数
- 补码表示法
- 整数
- 小数
- 反码表示法
- 整数
- 小数
- 移码表示法
用于判断有符号数大小及浮点数阶码大小(补码表示很难直接判断其真值大小)
- 移码和补码的比较
补码与移码只差一个符号位,即改变补码符号位即可得到移码(求移码的快捷方式)
设 x = +1100100
[x]移 = 2^7 + 1100100
[x]补 = 0,1100100
设 x = –1100100
[x]移 = 2^7 – 1100100
[x]补 = 1,0011100
数的定点表示和浮点表示
定点表示
小数定点机 | 整数定点机 | |
---|---|---|
格式 | Sf.S1S2 …Sn 数符.数值部分 |
SfS1S2 …Sn. 数符数值部分. |
原码 | -(1-2-n) ~ +(1-2-n) | -(2n-1) ~ +(2n-1) |
补码 | -1 ~ +(1-2-n) | -2n ~ +(2n-1) |
反码 | -(1-2-n) ~ +(1-2n) | -(2n-1) ~ +(2n-1) |
浮点表示
- 公式
N = S × rj
S:尾数,j:阶码,r:尾数的基值
当r = 2时,N = 11.0101 = 0.110101 × 210 = 0.00110101× 2100 - 浮点数的表示形式
jf j1 j2 … jm . SfS1S2 …Sn
Sf:代表浮点数的符号
n:其位数反映浮点数的精度
m:其位数反映浮点数的表示范围
jf和 m 共同表示小数点的实际位置
例一:设机器数字长为 24 位,欲表示±3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取1 位外,阶码、尾数各取几位?
解:因为 214 = 16384,215 = 32768
可知阶码为15可表示±3万的十进制数,1510 = 11112
在保证最大精度前提下,m需要尽可能小
所以m = 4,n = 21-4-1-1 = 18
- 浮点数的表示范围
范围 | |
---|---|
最小负数 | -2a× (1-2-n),a = 2m-1 |
最大负数 | -2a× 2-n,a = - (2m-1) |
最小负数 | 2a× 2-n,a = - (2m-1) |
最小负数 | 2a× (1-2-n),a = 2m-1 |
- 浮点数的规格化形式
r = 2 尾数最高位为 1
r = 4 尾数最高 2 位不全为 0
r = 8 尾数最高 3 位不全为 0
基数不同,浮点数的规格化形式不同 - 浮点数的规格化
r = 2
左规 尾数左移 1 位,阶码减 1
右规 尾数右移 1 位,阶码加 1
r = 4
左规 尾数左移 2 位,阶码减 1
右规 尾数右移 2 位,阶码加 1
r = 8
左规 尾数左移 3 位,阶码减 1
右规 尾数右移 3 位,阶码加 1
基数 r 越大,可表示的浮点数的范围越大
基数 r 越大,浮点数的精度降低
例一
将+19/128写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式,其中数值部分均取 10 位,数符取 1 位,浮点数阶码取 5 位(含1位阶符),尾数规格化。
解:
设 x = +19/128,
二进制形式 x = 0.0110011
定点表示 x = 0.0110011000
浮点规格化形式 x = 0.1100110000 × 2^-10
定点机中 [x]原 = [x]补 = [x]反 = 0.0010011000
浮点机中 [x]原 = 1, 0010; 0.1001100000
[x]补 = 1, 1110; 0.1001100000
[x]反 = 1, 1101; 0.1001100000
例二
将 –58 表示成二进制定点数和浮点数,并写出它在定点机和浮点机中的三种机器数及阶码为移码、尾数为补码的形式(其他要求同上例)。
解:
设 x = –58
二进制形式 x = –111010
定点表示 x = -0000111010
浮点规格化形式 x = 0.1110100000 × 2^110
定点机 [x]原 = 1,0000111010
[x]补 = 1,1111000110
[x]反 = 1,1111000101
浮点机 [x]原 = 0, 0110; 1. 1110100000
[x]补 = 0, 0110; 1. 0001100000
[x]反 = 0, 0110; 1. 0001011111
[x]阶移、尾补 = 1, 0110; 1. 0001100000
- 机器零
当浮点数尾数为 0 时,不论其阶码为何值按机器零处理
当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理
定点运算
移位运算
- 算术移位规则
符号位不变,移动数值位
码制 | 添补代码 | |
---|---|---|
正数 | 原码、补码、反码 | 0 |
负数 | 原码 补码 反码 |
0 右移添 1,左移添 0 0 |
- 加减法运算
连同符号位一起相加,符号位产生的进位自然丢掉
- 加法
整数:[A]补 + [B]补 = [A+B]补(mod 2n+1)
小数:[A]补 + [B]补 = [A+B]补(mod 2) - 减法
A–B = A+(–B )
整数:[A – B]补 = [A+(–B )]补 = [A]补 + [ – B]补 (mod 2n+1)
小数:[A – B]补 = [A+(–B )]补 = [A]补 + [ – B]补 (mod 2) - 溢出判断
(1)一位符号位判溢出:
参加操作的两个数(减法时即为被减数和“求补” 以后的减数)符号相同,其结果的符号与原操作数的符号不同,即为溢出
(2)两位符号位判溢出:
首先用2n+2模(小数用4),求补码
如-97,-41,补码为11,0011111,11,1010111
相加后结果双符号位相同则未溢出,若不同则溢出;双符号位最高位代表真正符号
- 乘法运算
采用加法和移位实现
A • B = A • 0.1011
= 0.1A + 0.00A + 0.001A +0.0001A
= 0.1A + 0.00A + 0.001( A +0.1A)
= 0.1A + 0.01[0 • A + 0. 1( A +0.1A)]
= 0.1{A +0.1[ 0 • A+0.1(A + 0.1A)]}
= 2-1{1•A +2-1[ 0 • A+2-1(1•A + 2-1(1•A+0))]}