IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Acces à la representation binaire d'un nombre float


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Acces à la representation binaire d'un nombre float
    Bonjour,

    je souhaiterais voir la représentation en binaire d'un nombre float en mémoire .
    Par exemple
    float nb_reel=2.7125E1 ;
    representation_binaire(nb_reel); // m'affiche les 32 bit representant en mémoire le nombre nb_reel

    j'ai essayé avec des manipulations du style ( nombre & masque) pour obtenir tout les bits mais ça ne marche pas car problème de type ?

    Pourquoi je cherche à voir ? Parce que selon le nombre que j'affecte à nb_reel et la manière dont je l'ecris au moment de l'affectation (ex: 3.4E11 versus 340000000000) ,quand je demande l'affichage de nb_reel (via un fprintf(stdout,"%f",nb_reel)) il n'affiche plus du tout le même que l'original , surement à cause de la conversion base 10 vers base 2 . En ayant la representation binaire en mémoire du nombre je pourrais par l'opération inverse vérifier et comprendre le nouveau nb_reel à la place de l'original de l'affectation

    Merci .

  2. #2
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Essai une truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float f = 3.1415f;
    int * ptr_tmp = (int *)(&f);
    printf("%x\n",*(ptr_tmp));
    Si il y a une méthode plus propre je suis preneur aussi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    merci pour ton code que j'ai ajouté à ma bidouille
    ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
        float f = 3.4E10;
      unsigned int a;
      unsigned int * ptr_tmp = (unsigned int *)(&f);
      a=*ptr_tmp;
     
     
      unsigned int tableau[32];
      int machaine[32];
      unsigned int som=1;
      int i;
     
      for(i=0;i<32;i++)
      {
         tableau[i]=som;
         som=som*2;
      }  
     
     
      unsigned int  resultat;
     
     
     for(i=0;i<=32;i++)
     {
       resultat = a & tableau[i];
       if( resultat == tableau[i] )
       { machaine[i]=1;  }
       else
       { machaine[i]=0;}
     }  
     
       fprintf(stdout,"nombre float en binaire est :");
    for(i=31;i>=0;i--)
    { 
     
      fprintf(stdout,"%d",machaine[i]);
     
    } 
     
    fprintf(stdout,"\n");
    fprintf(stdout,"nombre f  : %f\n ",f );
    fprintf(stdout,"nombre e  : %e\n ",f );
    fprintf(stdout,"nombre g  : %g\n ",f );
    a) pour f=10 j'obtiens
    nombre float en binaire est :01000001001000000000000000000000
    nombre f : 10.000000
    nombre e : 1.000000e+01
    nombre g : 10

    signe =0 pair
    exposant => 10000010 => 130-127=3
    mantisse => 01000000000000000000000 => 1.01 => 2^0+2^-2

    resultat =(2^0+2^-2)*2^3=2^3+2=10


    b) pour f= 3.1415

    nombre float en binaire est :01000000010010010000111001010110
    nombre f : 3.141500
    nombre e : 3.141500e+00
    nombre g : 3.1415

    signe=0 pair
    exposant =>10000000 => 128-127=1
    mantisse => 10010010000111001010110 => 1.10010010000111001010110 => 2^1*(2^0+2^-1+2^-4+2^-7+...) =2+1+1/8+1/64+1/2048+1/4096+1/8192+1/65536+....=3.141499996

    c) pour f=3.4E10
    nombre float en binaire est :01010000111111010101000111011010
    nombre f : 33999998976.000000
    nombre e : 3.400000e+10
    nombre g : 3.4e+10
    signe=0 pair
    exposant=> 10100001 => 161-127=34
    mantisse=> 11111010101000111011010 => (1.11111010101000111011010 )*2^34
    2^34+2^33+2^32+2^31+2^30+2^29+2^27+2^25+2^23+2^19+2^18+2^17+2^15+2^14+2^12=33999998976

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    remq : Di diou en C , c'est nettement plus compliqué de gérer les variables qu'en php ou qu'en script shell

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. calcul le nombre 0 dans la representation binaire de n
    Par kojima dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 16/04/2007, 23h40
  2. Représentation binaire de nombres
    Par airod dans le forum Général Python
    Réponses: 8
    Dernier message: 07/06/2006, 14h14
  3. Arrondir un nombre float
    Par Kyojimbo dans le forum Général Python
    Réponses: 5
    Dernier message: 14/03/2006, 19h14
  4. Réponses: 1
    Dernier message: 11/09/2005, 02h04
  5. CRITERIA - Représentation binaire d'un nombre décimal signé.
    Par RamDevTeam dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 10/08/2005, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo