2010-10-17 11 views
30

Quelqu'un peut-il s'il vous plaît me dire comment puis-je convertir ce nombre float: 12,25 en binaire? Je sais comment convertir le "12" mais pas le 0.25Comment convertir un nombre flottant en binaire?

Toute aide est très appréciée. Merci

+4

Manuellement :) Je peux le faire par programmation après cela. –

+0

Vous voulez obtenir '1100.01'? – SLaks

+0

Oui :) J'ai besoin de savoir comment calculer le 0,25 au binaire –

Répondre

21

Conserver la multiplication du nombre décimal après par deux jusqu'à ce qu'il devienne 1,0:

0.25*2 = 0.50 
0.50*2 = 1.00 

et le résultat est dans l'ordre inverse étant 0,01

+0

Je l'ai eu, Cela semble logique maintenant, Merci :) –

+10

@Slim Black: Attention: cela fonctionne bien pour des nombres comme 0.25, qui ont représentations exactes en binaire, mais pas pour des nombres comme 0.1, qui ne le font pas: 0.1 * 2 = 0.2, 0.2 * 2 = 0.4, 0.4 * 2 = 0.8, 0.8 * 2 = 1.6, 0.6 * 2 = 1.2, 0.2 * 2 = 0.4, ... Il se répète indéfiniment, et le résultat est 0.0 (0011) (la partie entre parenthèses se répète). –

+0

@Slim Black: Et notez, pour l'implémenter correctement par programmation, vous aurez besoin de l'arithmétique décimale - voir mon article http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/, en particulier la section dec2bin_f().) –

13

(d signifie décimal, b signifie binaire)

  1. 12.25d est votre flotteur.
  2. Vous écrivez 12d en binaire et le supprimez de votre float. Seul le reste restera (.25d).
  3. Vous écrivez le point.
  4. Alors que le reste (0.25d) n'est pas zéro (et/ou vous voulez plus de chiffres), multipliez-le par 2 (-> 0.50d), retirez et écrivez le chiffre à gauche du point (0), et continuez avec le nouveau reste (.50d).
+0

Oui, merci pour votre réponse :) –

+1

Et si mon flotteur est 5.1? Faire vos pas, je suis entré dans une boucle infinie, s'il vous plaît aider! – nautilusvn

+2

@nautilusvn: parce qu'il n'y a pas de puissance de 2 qui est aussi un multiple de 10, ce nombre a une séquence infinie de chiffres. vous pourriez vouloir abandonner votre calcul quelque part. – comonad

1
x = float(raw_input("enter number between 0 and 1: ")) 

p = 0 
while ((2**p)*x) %1 != 0: 
    p += 1 
    # print p 

    num = int (x * (2 ** p)) 
    # print num 

    result = '' 
    if num == 0: 
     result = '0' 
    while num > 0: 
     result = str(num%2) + result 
     num = num/2 

    for i in range (p - len(result)): 
     result = '0' + result 
    result = result[0:-p] + '.' + result[-p:] 

print result #this will print result for the decimal portion 
+0

OP a demandé comment le faire manuellement. –

+0

peut-être vous voulez également ajouter la référence à l'endroit où vous l'avez obtenu. ce code python me semble familier. –

8

traiterai exemple

Convertir 2,625 en binaire.

Nous considérerons la partie entière et la partie fractionnaire séparément.

The integral part is easy, 2 = 10. 

Pour la partie décimale:

0.625 × 2 = 1.25 1 Generate 1 and continue with the rest. 
0.25 × 2 = 0.5  0 Generate 0 and continue. 
0.5  × 2 = 1.0  1 Generate 1 and nothing remains. 

Alors 0,625 = 0,101 et 2,625 = 10,101.

Voir le lien this pour plus d'informations.

3

La valeur flottante est stockée dans le format IEEE 754, de sorte que nous ne pouvons pas convertir directement un entier, un caractère en un caractère binaire. Mais nous pouvons convertir float en binaire via un pointeur.

main() 
{ 
float a=7.5; 
int i,*p; p=&a; 
for (sizeof(int)*8-1;i>=0;i--) 
printf("%d",(*p)>>i&1); 
} 
OUTPUT::0 10000001 11100000000000000000000---space for better clarification not included in part of the program. 
+1

Je sais est vieux, mais quelle est la valeur de ** i ** ici? – Michi

Questions connexes