- 作者简介:一名后端开发人员,每天分享后端开发以及人工智能相关技术,行业前沿信息,面试宝典。
- 座右铭:未来是不可确定的,慢慢来是最快的。
- 个人主页:极客李华-CSDN博客
- 合作方式:私聊+
- 这个专栏内容:BAT等大厂常见后端java开发面试题详细讲解,更新数目100道常见大厂java后端开发面试题。
- 我的CSDN社区:https://bbs.csdn.net/forums/99eb3042821a4432868bb5bfc4d513a8
- 微信公众号,抖音,b站等平台统一叫做:极客李华,加入微信公众号领取各种编程资料,加入抖音,b站学习面试技巧,职业规划
题目描述:设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。
(1)x = 2011 x 0.100100, y = 2010 x (-0.011010)
(2)x = 2-101 x (-0.100100), y = 2-100 x (-0.010110)
(1)
x = 2011 x 0.100100, y = 2010 x (-0.011010)
第一步:
写出他们的浮点数,首先先把幂提取出来,然后再提出尾数,如果幂或者尾数是负数的话,就需要求他的补码。
[X]浮 = 00011 00.100100
详细过程:2011,取出001
,然后前面补充两个0
,如果是负数那么就是两个1
,再然后再取尾数00.100100
[Y]浮 = 00010 11.100110
详细过程:2010,取出010
,然后前面补充两个0
,如果是负数那么就是两个1
,再然后再取尾数,因为是负数所以需要对尾数取补码,然后双符号位变成11,11.100110
第二步:
求阶差并对阶
△E = Ex - Ey = [Ex]补 + [-Ey]补 = 00011 + 11110 = 00001
△E
为1,代表x
的阶码大,应使My
右移一位,阶码加一,于是[Y]浮
= 00011
(这个时候X
,Y
的阶码就一样了),阶码+1
了,那么对于尾数,这个小数点就要向左移动一位,于是11.100110
变成了11.110011
。
第三步:
尾数求和
00.100100
+11.110011
——————————
100.010111
第四步:
规格化
使得尾数部分成为双符号位,然后成为11.0或者00.1的形式,如果是这样的话就不需要规格化。
所以0.010111
需要小数点右移一位,变成0.101110
,因为小数点右移一位,所以阶码-1
。
向左规格化一位,阶码减一,小数点右移一位
[X + Y]浮 = 00010
, 00.101110
第五题:
判断溢出:无溢出
[X + Y]浮 = 00010, 00.101110
最后为[X + Y]补
= 2010 x 0.101110
(2)
第一步:
x = 2-101 x (-0.100100), y = 2-100 x (-0.010110)
第一步:
写出他们的浮点数,首先先把幂提取出来,然后再提出尾数,如果幂或者尾数是负数的话,就需要求他的补码。
[X]浮 = 11011 11.011110
详细过程:2-101,取出101
,求补码为011
,然后前面补充两个1
,因为是负数所以需要对尾数取补码,然后双符号位变成11,11.011110
[Y]浮 = 11100 11.101010
详细过程:2-100,取出100
,求补码为100
,然后前面补充两个1
,再然后再取尾数,因为是负数所以需要对尾数取补码,然后双符号位变成11,11.101010
第二步:
求阶差并对阶
△E = Ex - Ey = [Ex]补 + [-Ey]补 = Ey - Ex = 11100 - 11011 = 00001
△E
为1,代表x
的阶码小,应使Mx
移一位,阶码加一,于是[X]浮
= 11100
(这个时候X
,Y
的阶码就一样了),阶码+1
了,那么对于尾数,这个小数点就要向左移动一位,于是11.011110
变成了11.1011110
。
第三步:
尾数求和
11.011110
+11.101010
——————————
111.0110010
第四步:
规格化
使得尾数部分成为双符号位,然后成为11.0或者00.1的形式,如果是这样的话就不需要规格化。
因为尾数为11.0
不需要格式化
[X + Y]浮
= 11100
, 11.011001
第五题:
判断溢出:无溢出
[X + Y]浮
= 11100
, 11.011001
因为阶码和尾数都是负数,所以需要求补码
最后为[X + Y]补
= 2-100 x (-0.100111)