6.1无符号数和有符号数
一、无符号数 约定符号为正
n位无符号数的表示范围0~2n-1
二、有符号数
1.机器数与真值
最高位0表示正,1表示负
2.原码表示法
(1)定义
对于整数(x为真值,n为位数)
相当于正数前面加0,负数前面加1
对于小数(x为真值)
此时0分为+0,-0
3.补码表示法
(1)补的概念
比如时间,6点前推3小时(-3)为3点,后推9小时(+9)也是3点,则+9是-3以12为模的补数
(2)补码定义
整数:
小数:
(4)求补码的快捷方式
真值为正,补码为原码
真值为负,补码为原码除符号位外每位取反,加1
当x=-16时,原码1,10000 补码1,10000
当x=-17时,原码1,10001 补码1,01111
所以x<-16时,x1必为0
注意:补码的表示范围是-2n~2n-1,-32补码为1,00000,它没有原码
所以选C
x2~6全0时为-32
C
4.反码表示法
(1)定义
对于正数,原码=反码=补码
对于负数,符号位为1,原码数值部分取反得反码,加一得补码
原码有+-0;原码和反码是对齐的;补码+-0是同一种表示,多一个-2n-1;
机器数字长为8位,计算-13/64,29/128,100,-87的原码、反码、补码
注意:正数三码一样,符号位占8位中的一位
结论:相反数的补码为——连同符号位取反,再加1
补码1.0000——原码实际上溢出一位,真值为-1
补码1,0000——原码实际上溢出一位,真值为-16
5.移码表示法
补码表示很难直接判断其真值大小
(1)移码定义
(2)移码和补码的比较
移码和补码的符号位相反
(3)真值、补码和移码的对照表
(4)移码的特点
16.设机器数字长为16位,写出下列各种情况下它能表示的数的范围。设机器数采用一位符号位,答案均用十进制表示。
(1)无符号数;
(2)原码表示的定点小数;
(3)补码表示的定点小数;
(4)补码表示的定点整数;
(5)原码表示的定点整数;
6.2数的定点表示和浮点表示
一、定点表示
反码和原码一致,补码的下限扩展一个数
二、浮点表示
1.为什么在计算机中引入浮点表示?
1.编程困难,程序员需要调整小数点的位置数
2.数的表示范围小,为了表示两个大小相差很大的数据,需要很长的机器字长。
3.数据存储单元利用率低
2.浮点表示
浮点数的一般形式:N=S*rj ,S尾数、r基数(取2、4、8……)、j阶码
S小数,可正可负;j整数,可正可负
浮点数的表示形式
浮点数的表示范围
上溢无法用数值表示,下溢变为0
最大正数负数,阶数和尾数都大;最小正数负数,阶数和尾数都小。
设机器数字长为24位,欲表示± 3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取1位外,阶码、尾数各取几位?
215=32768,所以加上一位符号位,16位可以表示出所有6万的数。
小数点移动最多为15位,换算成二进制,阶数至少需要4位。
数符两位,阶码m=4位,尾数n=18位。
三、浮点数的规格化形式
更好的利用存储空间,规定尾数的最高位数值必须为有效值。
左规:尾数左移1位(相当于小数点右移1位),阶码减1
右规:尾数右移1位,阶码加1
基数不同,规格化形式不同:
r=2时,尾数最高位必为1
左规 尾数左移1位,阶码减1
右规 尾数右移1位,阶码加1
r=4时,尾数最高2位不全为0
左规 尾数左移2位,阶码减2
右规 尾数右移3位,阶码加2
r=8时,尾数最高3位不全为0
左规 尾数左移3位,阶码减3
右规 尾数右移3位,阶码加3
设m=4,n=10,r=2,写出尾数规格化后的浮点数的表示范围。最大正数,最小正数,最大负数,最小负数。
最大正数:2+1111*0.1111111111 = 215*(1-2-10)
最小正数:2-1111*0.1000000000 = 2-15*2-1 = 2-16
最大负数:最小正数取反 = -2-16
最小负数:最大正数取反 = -215*(1-2-10)
将+19/128写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。数值部分取10位,数符取1位,浮点数阶码取5位(1位阶符)。
二进制形式:0.0010011(首位数符+值的二进制形式)
定点表示:0.0010011000(补齐数值部分10位)
浮点规格化表示:0.1001100000*2-10
定点机中:原=反=补=0.0010011000
浮点机中:原=1,0010;0.1001100000
反=1,1101;0.1001100000
补=1,1110;0.1001100000
将-58写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。数值部分取10位,数符取1位,浮点数阶码取5位(1位阶符)。
只有在机器中才有符号位,其它都用正负号表示
没有要求规格化!
小数点右移,指数为负;小数点左移,指数为正。
机器零
机器零与真值零的区别是:机器零在数轴上表示为0点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为“机器零”,而真值零则表示0这一个点。
当浮点数尾数为0时,不论其阶码为何值,按机器零处理。
当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理。
四、IEEE754标准
和浮点机表示法的区别:
1.数符移到最前面
2.尾数最高位的1现在隐含了
3.注意不同位数时阶码和尾数的占比
这里的规格化数是以1开头的
真值——二进制——规格化——754
C1040000H
754——拆成符号、阶码、尾数——阶码-127;尾数转换成十进制加1
-1.5*213
B
最大正数:阶数(整数)最大,2^(2^6-1),尾数(小数)最大:1-2^8
最小负数:阶数最大:2^(2^6-1),尾数最小:-1
用补码表示,负值能往下再取一位
6.3定点运算
一、移位运算
1.定义
数字相对于小数点进行移位
左移绝对值扩大,右移绝对值缩小
2.算术移位规则
符号位不变,数值位移动。对于空出来的位置:
例1
左移1位,数值扩大两倍;左移丢弃1时,出错
右移1位,数值变为1/2;右移丢弃1时,精度下降
例2
对于补码机器数的算术移位,方法正确的是:
A右移时高位补0 ,左移时低位补 0
B右移时高位补 1 ,左移时低位补 0
C右移时高位补符号位,左移时低位补 0
D右移时高位补符号位,左移时低位补符号位
C
正数原反补一样,左移右移都补0;负数补码左移补0,右移补1(和符号位相同)
3.算术移位的硬件实现
可以从符号位取数,和符号位不相同则从外界取
丢1有可能出错、正确、影响精度
4.算术移位和逻辑移位的区别
以上讲的是算术移位,只对数值位移位
逻辑移位是把整个数进行移位,高低位都补0
二、加减法运算
1.加减法运算公式
(1)加法
(2)减法,化减为加,一个数的相反数的补码为其补码所有位取反再加一
连同符号位一起相加,符号位产生的进位丢掉
例:
3.溢出判断
两个数符号相同才会溢出
(1)一位符号位判溢出
参加操作的两个数符号相同,结果符号变化,即为溢出
硬件实现:最高有效位的进位 异或 符号位的进位 = 1,则溢出
就是说,如果符号位和最高有效位有且仅有一个发生了进位,则溢出。
(2)两位符号位判溢出
结果的双符号位相同则未溢出,不相同则溢出
计算时,双符号数会复制一份符号位使最高两位相同,结果中最高位代表真实符号
这里需要说明一点,采用双符号位方案时,寄存器或主存中的操作数只需保存一位符号位即可。因为任何正确的数,两个符号位的值总是相同的,而双符号位在加法器中又是必要的,故在相加时,寄存器中一位符号的值要同时送到加法器的两位符号位的输人端。
三、乘法运算
1.分析笔算乘法
原码的相乘,先不考虑符号
乘完位数会扩大一倍
符号位单独处理——异或
2.笔乘算法改进
小结
乘法运算可用“加”和“移位”实现
n=4,加4次,移4次
由乘数的末位决定被乘数是否与原部分积相加,然后右移一位形成新的部分积,同时乘数右移一位(末位丢弃),空出高位存放部分积的低位
被乘数只与部分积的高位相加
硬件:三个寄存器,具有移位功能;一个全加器
4.原码乘法
(1)原码一位乘运算规则
(2)原码一位乘递推公式
5.补码乘法
(1)补码一位乘运算规则
乘数为正,右移补1
乘数为负,最后加[-x]的补进行校正(不考)
1.部分积采用两位符号位
2.右移补1
Booth算法(重点)(被乘数、乘数符号任意)
通过最后两位的差值来决定是否加东西
1.不需要考虑绝对值,而是将符号位带入运算,结果的符号自然得出
2.添加一位附加位0
3.右移一位补位,保证符号位两位相同
4.乘数数据位4位,要右移四次,最后再判断一次是否加,但是不右移
5.x和y有效位数相同,结果的有效位数为2倍的x(或y)位数,所以乘数最后一位不取
小结
整数乘法与小数完全相同,用逗号代替小数点
原码乘——符号位单独处理
补码乘——符号位自然形成
不同的乘法运算需有不同的硬件支持
B
大数相乘才会溢出,F开头的肯定比9开头的小
原码:不考虑符号位,n=15,15次加15次移位,30us
补码:比原码最后多一次相乘,31us
浮点加减运算
1.写出两浮点数的补码,阶数和尾数都是两位符号位
2.对阶:求阶差jx-jy,按照小阶向大阶看齐的原则,阶码增大,尾数右移
注意:负数补码右移补1
3.尾数求和:正常相加
4.规格化:如果符号位为01或10,右规,尾数部分右移,阶码变一致,如果丢1,采用“0舍1入”
如果符号位与尾数最高位相同,左规至不相同为止,尾数部分左移,阶码减小
5.溢出判断
6.转为原码
正数都是39次
补码负数左移最多40次,右移只要1次
[