计算机运算方式(计算机组成原理)

有关原码、反码、补码的内容:推荐原码, 反码, 补码 详解 - ziqiu.zhang - 博客园 (cnblogs.com)

  1. 定点数和浮点数的区别

定点数:固定的小数点位置决定了固定位数的整数部分和小数部分,小数点不能移动,这种表达方式不利于表达特大数和特小数(因此推出浮点数)。

浮点数:由尾数、基数、指数、符号组成,比如(123.45可以表示为1.2345*10的2次方,尾数为1.2345,基数为10,指数为2,可以通过改变指数的大小来移动小数点。因为根据指数的不同,同一个浮点数有多种表达方式,为了规范性,标准的浮点数表示为d.dddXn的m次方,其中,小数点左边为1位非0数(在十进制中n为10,二进制中n为2)。

  1. 浮点数的运算:

加减运算:

计算过程分为6个过程:

(1)判0;(有一方为0时,另一方就不变或者是变成相反数,可以简化操作)

(2)对阶;(只有运算数的阶数相等,尾数所对应的权值才相等,尾数才能运算,可以从10进制浮点数的加减法运算理解。对阶原则是小阶码向大阶码对齐,即小阶码对应的浮点数的小数点右移对齐所需位数,如果采取大阶码向小阶码对齐,那么将进行左移,当超过尾数位数时,舍去的是高位部分,误差会很大。确定运算数阶码的谁大谁小可以通过阶码相减来判断。)

(3)尾数加减;

(4)尾数规格化;(对于补码尾数而言,其规格化特征为:数值最高位和符号位一定是相反的,这样的话原码小数点后面是1。规格化的作用是为了有效位数最多,这样精度也就越高。假设尾数是00.0011,阶码为4,规格化后,尾数是00.1100,阶码为2。)

(5)尾数舍入;(0舍1入法:当舍去部分最高部分为1时,对保留数最低部位加1,如果舍去部分最高部分为0,对保留数不操作。横置1法:直接对保留数最低位加1。例如:x=-0.1010011,保留5位,舍去部分为011,最高位为0,所以x=-0.1010)

(6)溢出判断。

浮点数格式问题:

有关浮点数范围的可以看这篇博客计算机组成浮点数补码规格化负数表示范围_cj1064789374的博客-CSDN博客_负数的规格化浮点数怎么表示

例题:

设浮点数字长16位,其中阶码4位(含1位阶符),尾数12位(含1位数符),将(51/128)转化为二进制格式化浮点数及机器数(其中阶码采取移码,基数为2,尾数采取补码),并回答此浮点格式的规格化数表示范围。

51/128=0.0110011=2的-1次方*0.1100110

阶码采用移码、基数2、尾数采用补码的机器数为0111;0.11001100000

最大正数为2的7次方x(1-2的负11);最小正数为2的负-9次方,最大负数为-2的-8次方*(2的-1次方+2的-11次方);最小负数为-2的7次方。

IEEE 754标准浮点数:单精度32位浮点数,双精度64位浮点数。由三部分组成,符号位(1bit)、阶码位(单:8,双:11bit),尾数位(单:23,双:52bit)。其中,基数n指定为2,二进制数。

阶码的求法:等于实际指数加上一个偏移量,偏移量等于2的(n-1)次方-1。n指阶码所占位数(单精度n为8), 之所以要加偏移量是为了应对阶码为负数的情况。 以单精度为例,8位数可以表示0-255一个256个数,这256个数所对应的有效指数范围是-127-128,其中,实际指数0对应的指数值为127,-64对应的指数值为63,-127对应的是0,128对应的是255。

尾数的求法:IEEE 754为标准的浮点数,所以其小数点左边只能为1。所以我们可以忽略这个1,这样的话尾数就能多一位来表达,范围更大。例如二进制数1.0011,在单精度下它的尾数是00110000000000000000000。

举例:1.0,-1.5的IEEE 754单精度表达式

1.0 =1.0*2的0次方,符号位是0,阶码是127,尾数是0,

所以最后结果:0 01111111 000 0000 0000 0000 0000 0000

16进制表达:3F800000

-1.5 =-1.1=-1.1*2的0次方,符号位 为1,阶码位127,尾数是1,

所以最后的结果:1 01111111 100 0000 0000 0000 0000 0000

16进制表达:BFC00000

举例:-1.0 的单精度,双精度表达

单:符号位 1, 阶码为127,尾数为0

结果:1 01111111 000 0000 0000 0000 0000 0000

16进制表达:BF800000

双:符号位1,阶码为1023,尾数为0

结果:1 01111111111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

16进制表达:BFF0000000000000

举例:75.875的IEEE 754单双精度16进制表达

75.875=1001011.111=1.001011111*2的6次方

符号位 0 单阶码:133 双阶码:1029 单尾数001 0111 1100 0000 0000 0000 双尾数0010 1111 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

单16进制:4297C000

双16进制:4052F80000000000

总结:先将10进制数转为标准2进制数,再确定符号位,正数为0,负数为1,阶码要记得加上偏移量,尾数是去掉小数点左侧的1,在右侧补上对应个数的0。

参考连接:定点数与浮点数区别 - cloudseawang - 博客园 (cnblogs.com)

一些小知识点:

  1. 表示0是唯一形式的机器数是补码和移码(移码是补码符号位取反) ,在原码和反码里,0被分为了+0,-0,在补码中,原来表示-0的数用来表示最小负数了,所以用补码表示范围时,负数的范围比正数大1。同理,在定点小数中,只有补码能够表示-1,移码只能表示整数。

  1. 算术移位和逻辑移位的区别:算术移位是,符号位(最高位)保持不变,左移时最高数值位移丢,右移时最低数值位移丢,移位时出现的空位根据不同机器数的移位规则确定填补空位的代码(1/0)。逻辑移位时,没有符号位,左移时最高位移丢,低位补0,右移时最低位移丢,高位补0。例如:10101110 逻辑右移1位得01010111,逻辑左移1位得01011100。若将其视为补码,则算术左移1位得11011100,算术右移1位得11010111。

  1. 判断溢出的一些方法:在定点机中采用单符号为判断补码加减时,加法时,最高位进位和次高位进位异或结果为1时,则为溢出。参与运算的两个操作数符号相同,减法时(减数需连同符号位在内每位取反,末位加1),而结果的符号又与原操作数的符号不同,则溢出。在浮点机中,溢出根据阶码来判断,当阶码大于最大正阶码时,即为浮点数溢出。若阶码小于最小负阶码时,按机器0处理。

  1. 补码乘法运算用booth算法时,记得在乘数后加上一位0,01为[x]补,10位[-x]补,00/11为0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值