十进制转换二进制问题
2019-10-12 14:56:14 星期六
十进制向二进制的转换在python3语言中是一个附带的功能,如下代码所示。
# 获取用户输入十进制数
dec = int(input("输入数字:"))
print("十进制数为:", dec)
print("转换为二进制为:", bin(dec))
print("转换为八进制为:", oct(dec))
print("转换为十六进制为:", hex(dec))
于是抱着试试的心态,我尝试着自己在python3.7版本中进行编辑,成功写出了十进制转换为二进制的小程序,其中有所感悟,也有所收获,但不免也有一些疑惑和问题,下面是我的编码
#2019/10/12 13:15
#十进制转换二进制问题
print('''--------------------------------------------------
作者:魏来
十进制转换IEEE754标准的32浮点数的二进制格式(伪)
--------------------------------------------------''')
a = 0
while a < 9999:
a = a+1
number = input('输入数字(输入quit退出程序):')
if number in ['quit']: #退出程序
break
else:
number = float(number)
list_int=[]
list_float=[]
int_ = int(number)
float_ = number - int_
while int_!= 0: #当整数部分不为0时,执行循环
list_int .append(int_%2) #在list_int中排列整数部分的二进制
int_ = int_//2 #除2取整
else:
list_int.append(0)
list_int.reverse() #反向list_int列表使整数部分二进制以正确形式所显示
while float_ > 0.00001:
list_float.append(int(float_*2)) #小数部分转化为二进制需除法计算
float_ = float_ *2 - int(float_*2)
else:
list_float.append(0)
while len(list_float) > 32: #限定float为32位
list_float.pop() #若溢出,则删除最后一位
else:
pass
list_int.append(".")
result = list_int + list_float
for x in result:
print(x,end="")
print('''
--------------------------------------------------''')
在这段代码中,我借助了列表函数和方法,其中list_int和list_float分别代表了输入值的整数部分和小数部分。同时,根据十进制转换二进制中的基础方法,编辑出比特数的排列方式。其中整数部分的列表需要颠倒位置,因为整数部分的转换是从左向右的,需要颠倒;小数部分需要控制在32位以内;以及小数点;故我分别使用了下面三个指令:
list_int.reverse()
list_float.pop()
list_int.append(".")
同时我也发现了漏洞以及缺点:
- 无法计算负数的二进制,目前不知道怎样解决
- IEEE754标准的32浮点数的二进制格式要求中,小数部分为32位(已做到),整数部分要求8位(需要改进,借助list.append(0)即可做出),以及1位的符号位(需考虑)
- 尚存冗杂代码