Comment obtenir la chaîne sous forme de représentation binaire IEEE 754 d'un flottant 32 bits ?
Exemple
1.00 -> '00111111100000000000000000000000'
Comment obtenir la chaîne sous forme de représentation binaire IEEE 754 d'un flottant 32 bits ?
Exemple
1.00 -> '00111111100000000000000000000000'
Plusieurs de ces réponses ne fonctionnaient pas comme écrit avec Python 3, ou ne donnaient pas la représentation correcte des nombres négatifs à virgule flottante. J'ai trouvé la réponse suivante qui fonctionne pour moi (bien qu'elle donne une représentation 64 bits, ce dont j'avais besoin)
def float_to_binary_string(f):
def int_to_8bit_binary_string(n):
stg=bin(n).replace('0b','')
fillstg = '0'*(8-len(stg))
return fillstg+stg
return ''.join( int_to_8bit_binary_string(int(b)) for b in struct.pack('>d',f) )
J'en ai fait un très simple. Vérifiez-le s'il vous plaît. Et si vous pensez qu'il y a une erreur, faites-le moi savoir. Cela fonctionne bien pour moi.
sds=float(input("Enter the number : "))
sf=float("0."+(str(sds).split(".")[-1]))
aa=[]
while len(aa)<15:
dd=round(sf*2,5)
if dd-1>0:
aa.append(1)
sf=dd-1
else:
sf=round(dd,5)
aa.append(0)
des=aa[:-1]
print("\n")
AA=([str(i) for i in des])
print("So the Binary Of : %s>>>"%sds,bin(int(str(sds).split(".")[0])).replace("0b",'')+"."+"".join(AA))
ou dans le cas d'un nombre entier, utilisez simplement bin(integer).replace("0b",'')
Vous pouvez utiliser le format .pour la représentation la plus simple des bits à mon avis :
mon code ressemblerait à quelque chose comme :
def fto32b(flt):
# is given a 32 bit float value and converts it to a binary string
if isinstance(flt,float):
# THE FOLLOWING IS AN EXPANDED REPRESENTATION OF THE ONE LINE RETURN
# packed = struct.pack('!f',flt) <- get the hex representation in (!)Big Endian format of a (f) Float
# integers = []
# for c in packed:
# integers.append(ord(c)) <- change each entry into an int
# binaries = []
# for i in integers:
# binaries.append("{0:08b}".format(i)) <- get the 8bit binary representation of each int (00100101)
# binarystring = ''.join(binaries) <- join all the bytes together
# return binarystring
return ''.join(["{0:08b}".format(i) for i in [ord(c) for c in struct.pack('!f',flt)]])
return None
Sortie :
>>> a = 5.0
'01000000101000000000000000000000'
>>> b = 1.0
'00111111100000000000000000000000'
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.