半精度浮点数取5bit指数位

半精度浮点是指用16bit表示一个浮点数,最高1bit为符号位,中间5bit为指数a,低10bit为尾数b

Value = (符号位)(1+b/1024)*(2^(a-16))

程序很简单,用pyinstaller -F getExp.py压缩成getExp.exe(见另一篇博客py文件打包成exe)可以用

由于只取指数位,程序简单处理了符号位和尾数位

#coding = utf-8

if __name__ == '__main__':
	file = input('输入半精度浮点文件:
')
	outfile = input('输出文件:
')
	inputdata = []
	with open(file, 'r') as f:
		for line in f.readlines():
			item = line[2:] #这里假设输入数据是带有0x的16进制数如0x412F,所以要从0x后开始取
			data = hex(eval(line)) #获取16进制数
			dataout = bin(int(data, 16)) #转为二进制数
			temp = int(dataout[2:], 2) #转为的二进制数是0b..需要从第三位开始取,然后将二进制转为十进制
			exp = temp >> 10 #取十进制数的前6bit
			if exp > 31: #如果符号位是1的话
				inputdata.append(exp-32)
			else: #符号位为0
				inputdata.append(exp)
				
	with open(outfile, 'w+') as f_w:
		for item in inputdata:
			f_w.write(str(item)+'
')
	print('Sucessfully!')
	input('Press any key to Exit:
')

  

原文地址:https://www.cnblogs.com/xqn2017/p/8021490.html