栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python中float的二进制表示(位不是十六进制)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中float的二进制表示(位不是十六进制)

您可以使用以下

struct
软件包:

import structdef binary(num):    return ''.join(bin(ord(c)).replace('0b', '').rjust(8, '0') for c in struct.pack('!f', num))

它将其打包为网络字节排序的浮点数,然后将每个结果字节转换为8位二进制表示形式并将其串联起来:

>>> binary(1)'00111111100000000000000000000000'

编辑 :有人要求扩大解释。我将使用中间变量对此进行扩展,以注释每个步骤。

def binary(num):    # Struct can provide us with the float packed into bytes. The '!' ensures that    # it's in network byte order (big-endian) and the 'f' says that it should be    # packed as a float. Alternatively, for double-precision, you could use 'd'.    packed = struct.pack('!f', num)    print 'Packed: %s' % repr(packed)    # For each character in the returned string, we'll turn it into its corresponding    # integer pre point    #     # [62, 163, 215, 10] = [ord(c) for c in '>xa3xd7n']    integers = [ord(c) for c in packed]    print 'Integers: %s' % integers    # For each integer, we'll convert it to its binary representation.    binaries = [bin(i) for i in integers]    print 'Binaries: %s' % binaries    # Now strip off the '0b' from each of these    stripped_binaries = [s.replace('0b', '') for s in binaries]    print 'Stripped: %s' % stripped_binaries    # Pad each byte's binary representation's with 0's to make sure it has all 8 bits:    #    # ['00111110', '10100011', '11010111', '00001010']    padded = [s.rjust(8, '0') for s in stripped_binaries]    print 'Padded: %s' % padded    # At this point, we have each of the bytes for the network byte ordered float    # in an array as binary strings. Now we just concatenate them to get the total    # representation of the float:    return ''.join(padded)

以及一些示例的结果:

>>> binary(1)Packed: '?x80x00x00'Integers: [63, 128, 0, 0]Binaries: ['0b111111', '0b10000000', '0b0', '0b0']Stripped: ['111111', '10000000', '0', '0']Padded: ['00111111', '10000000', '00000000', '00000000']'00111111100000000000000000000000'>>> binary(0.32)Packed: '>xa3xd7n'Integers: [62, 163, 215, 10]Binaries: ['0b111110', '0b10100011', '0b11010111', '0b1010']Stripped: ['111110', '10100011', '11010111', '1010']Padded: ['00111110', '10100011', '11010111', '00001010']'00111110101000111101011100001010'


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号