2019-408考研之组成原理笔记——第二章(2)

注:本次对定点数的乘除和浮点数的加减运算没有作任何说明,因为实在是很难将每一步表达清楚,而且工程量太大,建议对这方面不太了解的多看看相关的书籍

https://wenku.baidu.com/view/c9345bd533d4b14e852468c6.html第35张PPT开始讲解具体的过程

    1. 定点数与浮点数的介绍
      1. 定点数:小数点的位置为固定不变的,当位置固定为数据最高位之前(即符号位之后),称为定点小数;固定在最低位之后,称为定点整数

例:1 1111,表示成定点整数为 -15,表示成定点小数为 -0.9375(-1+2^-4)很显然当机器字长为n+1时,当数据位均为1,正数则为最大(整数:2n-1,小数:1-2-n),负数则为最小(整数:-(2n-1),小数:-(1-2-n))

      1. 浮点数:小数点的位置根据比例的改变而改变,一般表示为N=r^E ´ M

r是浮点数阶码的底,和尾数的基数相同,一般默认为2(隐含并默认),具体细节可看1.4.4的补充部分:阶码和对应的例题

注:阶码E的位数决定了浮点数的范围,尾数M的位数反映了浮点数的精度,而基数r越大,范围越大,精度越低。为了方便各浮点的运算,采用浮点数规格化,

即通过调整一个非规格化浮点数的尾数和阶码大小,使非零的浮点数在尾数的最高位上保证是有效值。(简单判断:当基数为2时,补码规格化后尾数的最高位与尾数的符号位一定相反,原码规格化后尾数的最高位一定是1)(基数为4或8时,原码规格化后最高的 两位或三位不全为0)

例:+1.111(机器数) -> 0.1111(原) -> 0.1111(补)(小数点左移1位,阶码为0 01)

-1.111(机器数) -> 1.1111(原) -> 1.01111(补)(小数点左移2位,阶码为0 10)

区分:补码规格化尾数的最大负数是1.01…1形式,而原码规格化尾数的最大负数是1.10…0形式(- (0.10…0+0.0…1)=1.10…01(原)= 1.01…1(补)才符合规格化)

注:IEEE754标准:标准浮点数格式,分为短、长浮点数(和临时浮点数)

格式为:符号位+阶码(用移码表示)+尾数数值(用原码表示,因最高位一定是1,可将其隐含而多一位),短浮点数(单精度、float型)阶码位为8,尾数位为23,总位数23;长浮点数(双精度、double型)阶码位11,尾数位52,总位数64

例:采用IEEE754单精度浮点数格式存放数据 -8.25:符号位为1,真值为: -1000.01,即-1.00001´23,故阶码为3+0111 1111=1000 0010,尾数部分用原码表示,因为最高位(整数部分)一定是1,故隐含,则尾数部分:0000 10…0,故最终IEEE754标准下存放的结果为1 1000 0010 0000 10…0,即C104 0000H

例:某数采用IEEE754单精度浮点数格式表示为C640 0000H,则该数的值:

       C640,即1 100 0110 0 100 0000,符号位为1,负数;阶数为1000 1100 – 0111 1111

=1000 1101 – 1000 0000 = 1101为13(若阶码小于127,阶数即为负数);尾数:100

加上被隐含的整数1,即1.10…0(2)=1.5(10),故该数为 – 1.5´ 213

    1. 定点数与浮点数的运算
      1. 定点数的运算
  1. 移位,分为左移和右移,对带符号数,则为算术移位,算术移位过程中符号位保存不变;对无符号移位操作即逻辑移位

左移:算术移位:各位均依次左移,末位补0。例外:负数的反码在左移是末位补1(正数和负数在移位后符号位不变,即移位后都相当于对真值补0)逻辑移位:末位补0。

右移:算术右移:符号位不变,各位(包括符号位)均依次右移,最低位移至标志位(注:负数的补码和反码在右移是末位补1);逻辑右移:末位补0

注:对于原码,当符号位被改变,即溢出;若无改变,则每左移一位即数值乘以2,不考虑因右移而舍弃的尾数,相当于除以2。

扩:循环移位:将移出的数再移入数据中。分为带进位标志位CF的循环移位(移位时进位的数值移入数据中)和不带进位的循环移位。

例:补码1011 0111,左移一位:(1)011 0111 0,右移一位:1 1011 011(1)

          反码1011 0111(负数),左移一位:(1)011 0111 1,右移一位:1 1011 011(1)

原码1011 0111,循环左移:011 0111 1(溢出)循环右移:1 1011 011,若带进位标志位为0,大循环左移一位:011 0111 0(CF=1,溢出),左移两位:11 0111 01(CF=0,溢出),原码大循环右移一位:0 1011 011(CF=1,溢出)

  1. 加减

加法:原码:符号相同,绝对值相加;符号相反,绝对值大的数减去绝对值小的数,符号位与绝对值大的数相同;补码:两数补码直接相加(为补码)

减法:原码:将减数符号取反后与被减数按原码加法求值;补码:将减数的补码相反数与被减数的补码相加(结果以补码表示)

例:A=-22(真)=1001 0110(原)=1110 1010(补),B=+91(真)=0101 1011(原、补),则:A+B,10110<101 1011,取+,原码:1011011-10110=100 0101,A+B=01000101= +69(真) ;补码:111 01010(补)+0101 1011=1 0100 0101(补)= 100 0101(原)=+69(真)   A-B,原码:减数为B,符号取反为”-”和被减数相同,按原码加法11011011 +1001 0110=1 0111 0001=111 0001(原)=113,故最终结果为A-B=-113;补码:B的补码相反数 -101 1011=0101 1011(补)取反+1=1010 0101(补反) + (A) 1110 1010(补)=  1 1000 1111(补)=1000 1111(补)=1111 0001(原)= -113(真)

  1. 溢出,是指运算结果超过了数的表示范围,大于机器所能表示的最大正数为上溢,小于最小负数的为下溢,只可能出现在符号相同的加减

溢出判断的方法:1.单符号:参加操作的两个数符号相同,结果与操作数符号不同,即为溢出(V=1);2.双符号(变形补码):运算结果左第一位和第二位作为两符号位,相同,无溢出(SS=00结果为正,SS=11结果为负);运算结果两符号位不同,则溢出(SS=01,正溢出;SS=10,负溢出),此时最高位符号代表真正符号;3.进位判断:符号位的进位和最高位进位相同,无溢出,不同,溢出

  1. 乘法
  2. 除法
      1. 浮点数的运算
  1. 加减
  2. 溢出
      1. 强制类型转换与符号扩展
  1. 强制类型转换:保持位置不变,但对应每一位的实际含义发生变化;由短字长到长字长转换,高位部分需扩展为原数字的符号位

C:char->int->long->double和float->double转换过程无精度损失(从前到后是范围和精度都是从小到大)转换的结果为高精度

  1. 符号扩展:正数添0;负数:原码符号位为1,故添1,反码添1;补码整数添1,小数添0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_August

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值