IEEE754 浮点数

把十进制数5.75,161.875,-0.0234375 的单精度浮点数

5.75
第一步 转换成二进制
5=101
.75=.11
5.75=101.11
S=0
第二步移动小数点 1.0111 移动两位e=2
E=127+2=129
=10000001
M=01110000000000000000000

161.875
=10100001
.875=.111
S=0
移动7位e=7
E=134=10000110
M=01000011110000000000000

-0.0234375
转换成二进制,只保留八位,为-0.0000011
移动6位 e=6
S=1
E=121=1111001
M=00000110000000000000000

python上实现十进制转换IEEE754

def ConvertFixedIntegerToComplement(fixedInterger) :#将整数部分转换成补码
return bin(fixedInterger)[2:]
def ConvertFixedDecimalToComplement(fixedDecimal) :#将小数部分转换成补码
fixedpoint = int(fixedDecimal) / (10.0**len(fixedDecimal))
s = ''
while fixedDecimal != 1.0 and len(s) < 23 :
fixedpoint = fixedpoint * 2.0
s += str(fixedpoint)[0]
fixedpoint = fixedpoint if str(fixedpoint)[0] == '0' else fixedpoint - 1.0
return s
def ConvertToExponentMarker(number) : #阶码生成
return bin(number + 127)[2:].zfill(8) # E=e+127
def ConvertToFloat(floatingPoint) :#转换成IEEE754标准的数
floatingPointString = str(floatingPoint)
if floatingPointString.find('-') != -1 :#判断符号位
sign = '1'
floatingPointString = floatingPointString[1:]
else :
sign = '0'
l = floatingPointString.split('.')#将整数和小数分离
front = ConvertFixedIntegerToComplement(int(l[0]))#返回整数补码
rear = ConvertFixedDecimalToComplement(l[1])#返回小数补码
floatingPointString = front + '.' + rear #整合
relativePos = floatingPointString.find('.') - floatingPointString.find('1')#获得字符1的开始位置
if relativePos > 0 :#若小数点在第一个1之后
exponet = ConvertToExponentMarker(relativePos-1)#获得阶码
mantissa = floatingPointString[floatingPointString.find('1')+1 : floatingPointString.find('.')] +floatingPointString[floatingPointString.find('.') + 1 :] # 获得尾数,注意当尾数的值不为0时,尾数的最高有效位应为1,这称为浮点数的规格化表示
else :
exponet = ConvertToExponentMarker(relativePos)#获得阶码
mantissa = floatingPointString[floatingPointString.find('1') + 1: ] # 获得尾数
mantissa = mantissa[:23] + '0' * (23 - len(mantissa))
floatingPointString = '0b' + sign + exponet + mantissa #S,E,M整合起来
print(floatingPointString)
return hex( int( floatingPointString , 2 ) )
X=ConvertToFloat(input(“输入一个十进制数”))
print(x)

问题

len(s)< 3 中
23位的不是尾数吗,和符号位是什么关系

posted @ 2021-10-13 20:27  20211309宁心宇  阅读(60)  评论(0编辑  收藏  举报