计算机组成原理学习笔记——定点数和浮点数的简单总结

一、定点数总结

1、关于 C 语言结构体

  • 设 C 语言结构体如下定义:
    struct{
    	int  a;
    	char b;
    	short c;
    }record;
    record.a=273.
    
  • 若采用小端存储方式存放数据。
  • 若 record 变量的首地址为 0xC008,则0xC008 中的内容及 record.c 的地址分别为:0x11 和 0xC00E。
  • 分析:
  • 整个record 变量占 7B,由于按边界对齐存放,故 record 占用 8B,record.a=273, int 型占 4 B,十六进制表示:0x00000111,最低位有效字节为 0x11,因为采用小端方式,所以先存放最低有效字节,也就是 record 变量的首地址 0xC008 中存放的内容为 0x11,整个 record 变量的小端存放如下:
    在这里插入图片描述
  • 所以 record.c 的首地址为 0xC00E。

2、0 在四种机器数中的表示

在这里插入图片描述

3、为什么计算机内部主要采用补码表示定点数?

  • 计算机内部的定点数大多用补码表示,补码有以下特点:
    1)零的表示唯一;2)符号位可以和数值部分一起参与运算;3)减法可以用加法实现。

4、关于数的比较

  • 1)若 x 的补码=1.abcd,当满足 a 为 0,bcd 任意时,x<-1/2 成立。因为 -1/2 的补码=1.1000,同种表示形式下,符号位相同,则数值位越大,码值越大;因此,要小于 -1/2,则 a 必须为 0,bcd 任意。
  • 2)若 x 的补码=1,abcdef ,要使 x<-32 则 a 为1,bcdef 中至少有一位是 1.因为 x 的符号位是 1,所以 x 是负数。对于负数,绝对值越小,数值越大,所以要大于 -32,则 x 的绝对值小于 32,32=0,10 0000,-32的补码=1,10 0000,所以当 a 为 1,其余中至少有一位是 1,在各位取反末尾减一后,a 一定为 0(补码为原码除符号位外各位取反末尾加一)。 例如:1,10 1000 的真值为 -11000,也就是 -24,显然大于 -32.

5、关于补码乘法

  • 若 1 位符号位,n 位数值位,补码乘法需要进行 n+1 次加法运算,且乘积为 2n+1 位,1 指符号位。

6、关于除法

  • 1)在原码不恢复余除法中,仅当最后一步不够减(除法用减法实现)时,才恢复一次余数。
  • 2)补码不恢复余除法中,异号相除时,够减上商 0,不够减上商 1.

7、关于地址的表示

  • 计算机中,通常用无符号数来表示主存的地址。

8、由 3 个 “1”和 5 个“0”组成的二进制补码,能表示的最小整数是 1000 0011,真值为 -125.

9、关于机器指令

  • 32 位计算机按字节编址,采用小端方式,int i=0 对应指令的机器代码是:C7 45 FC 00 00 00 00,那么 int i=-64 对应的机器指令的机器代码:C7 45 FC C0 FF FF FF.
  • 因为 -64 对应的十六进制表示为 0xFFFF FFC0,而小端方式先存放最低有效字节,-64 的最低有效字节为 C0。

10、x/2 和 x*2 的意义

  • 若 x 的机器码:8000 0004H,则 x/2 的机器码:4000 0002H,x2 的机器码:0000 0008H。x/2 相当于 x 的机器码进行一位右移操作,而 2x 则相当于机器码进行一位左移操作。

11、一个加法器能否实现数的加减法?

  • 可以。N 为加法器实现的是模 2^n 无符号整数加法运算。
  • 对于无符号数的加法操作,想当然的可以直接用加法器实现,而对于减法操,又因为 a-b 可用 a 加 b 的补码实现,也就是 a-b=a+补码([-b])。因此无符号数的加减操作都可以用一个加法器实现。
  • 对于有符号数,因为补码加减法的规则如下:
    补码(a+b)=补码(a) + 补码(b),补码(a-b)=补码(a) - 补码(b) = 补码(a) +补码(-b),故也可以在同一个加法器中实现。

12、如何判断溢出

  • 1)若加法器输入端(加法)的符号相同,且不同于输出端(和)的符号,那么结果发生溢出。
  • 2)若加法器完成加法操作,若符号位产生的进位与最高数值位产生的进位不一样,那么结果发生溢出。

13、补码(X) +补码(Y) = 2 + 补码(X + Y) = 补码(X +Y)

  • 1)x,y > 0,X+Y>0 ,正数的补码和原码一样,所以成立。
  • 2)x>0, y<0, 则 x+y>0 或 x+y<0,已知负数的补码为 2 加上真值,所以也成立。
  • 3)x<0, y>0 同 3)
  • 4)x<0, y<0 ,则 补码(X) +补码(Y) = 2 +X + 2 + Y = 2 +(2 + X + Y ),又 |X +Y |<1, 1<(2+X+Y)<2, 2+(2+X+Y) 进位 2 必丢失,因此也成立。
  • 可以得出结论:在模 2 意义下,任意两数的补码之和等于两数之和的补码。

二、浮点数

1、浮点数基数、阶码位数和尾数位数的影响

  • 在浮点数总位数不变的情况下,阶码位数越多,尾数位越少,则表示的数的范围越大,精度越差(数变稀疏)
  • 基数越大,范围越大,但精度变低。
  • 基数越大,在运算中尾数右移的可能性小,运算的精度损失越小;由于基数大时发生因对阶或尾数溢出需要右规及规格化需要左移的次数显著减少,因此运算速度可以提高;基数越大,意味着可表示的数越多。

2、关于浮点数移位

  • 假设机器数采用反码表示,当机器数为负时,左移时高位丢 0,结果出错;右移时低位丢 0,影响精度;在算术移位的情况下,补码左移的前提条件是其原有最高有效位与原符号位相同;在算术移位的情况下,双符号的一位操作只有低位符号位需要参与移位操作。

3、浮点数运算结果可能出现以下几种情况:

  • 1)阶码上溢出。一个正指数超出了最大允许值时,浮点数发生上溢出(向无穷方向);若结果是正数,则属于正上溢;若结果为负数,则属于负上溢;该情况为软件故障,通常需要引入溢出故障处理程序进行处理。
  • 2)阶码下溢出。一个负指数比允许的最小值小,浮点数发生下溢。一般把下溢出时的值置为 0,因此此种情况不算溢出故障。
  • 3)尾数溢出。当尾数最高有效位有进位时,发生尾数溢出,需要进行右规操作,直到尾数不溢出;此时只要阶码不发生上溢,浮点数就不会溢出。
  • 4)非规格化尾数。当数值部分最高位不是一个有效值(如原码时为 0 或补码与符号位相同),尾数为非规格化形式;此时,需要进行尾数左规,直到尾数符合规格化形式。

4、浮点数基数的表示

  • 浮点机种一旦基数确定了就不会改变,基值通常在浮点数中是隐含表示的,并不会出现在浮点数中。

上一篇
下一篇

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

御承扬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值