40 votes

Comment convertir un nombre flottant en binaire ?

Quelqu'un peut-il me dire comment je peux convertir ce nombre flottant : 12.25 en binaire ? Je sais comment convertir le "12" mais pas le 0.25

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

32voto

Govind Prabhu Points 453

Considérez l'exemple ci-dessous

Convertir 2.625 en binaire.

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

The integral part is easy, 2 = 10. 

Pour la partie fractionnaire :

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.

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

Voir ce lien pour plus d'informations.

28voto

Abhi Points 412

Continuez à multiplier le nombre après la virgule par 2 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 de 0,01

14voto

comonad Points 1852

(d signifie décimal, b signifie binaire)

  1. 12.25d est votre flotteur.
  2. Vous écrivez 12d en binaire et le retirez de votre flotteur. Il ne restera que le reste (.25d).
  3. Tu écris 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), supprimez et écrivez le chiffre à gauche du point (0), et continuez avec le nouveau reste (.50d).

5voto

ilango victor Points 51

La valeur de float est stockée au format IEEE 754 donc nous ne pouvons pas la convertir directement comme entier, char en binaire.

Mais nous pouvons convertir le flotteur en binaire à l'aide d'un pointeur.

#include <stdio.h>

int main()
{
    float a = 7.5;
    int i;
    int * p;

    p = &a;
    for (i = sizeof(int) * 8 - 1; i >= 0; i--)
    {   
        printf("%d", (*p) >> i & 1); 
    }   

    return 0;
}

Sortie

0 10000001 11100000000000000000000

Les espaces ajoutés à des fins de clarification ne font pas partie du programme.

1voto

iLabQC Points 41
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

Prograide.com

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.

Powered by:

X