De base 10 en base 2 du dernier bit au1er bit

Résolu
pépereF Messages postés 36 Date d'inscription   Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

dans se programme qui se compile sans probléme, je n'arrive pas à avoir le résultat escompté.
Par exemple:
lorsque je rentre 13 en base 10,je devrais avoir 1011 en base 2 mais je n'obtient que 10.

ou est mon erreur?
voici mon programme
merci

Description:
Ecrire un nombre en base 2 du dernier au premier bit.*/

#include<stdio.h>

int main()
{
int n;
/*Demande d'un nombre au clavier*/
printf("Changement de base: base10 <-> base2\n\n");
printf("Introduire un nombre en base 10: ");
scanf("%d",&n);
while(n)
{
/*Ecrit le reste de la division par 2*/
printf("%c",'0'+(n%2));
/*divise le nombre par 2*/
n/=2;
scanf("%c",&n);
}
return 0;
}
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    #include <stdio.h>
    
    int main ()
    {
      int nb;
    
      printf ("Entrez un nombre en base 10 : ");
      scanf ("%d", &nb);
      while (nb)
        {
          printf ("%c", '0' + (nb % 2));
          nb /= 2;
        }
      putchar ('\n');
      return 0;
    }
    
    mais pourquoi utilliser %c?
    #include <stdio.h>
    
    int main ()
    {
      int nb;
    
      printf ("Entrez un nombre en base 10 : ");
      scanf ("%d", &nb);
      while (nb)
        {
          printf ("%d", nb % 2);
          nb /= 2;
        }
      putchar ('\n');
      return 0;
    }
    


    5
  2. pp77www
     
    dans se programme qui se compile sans probléme, je n'arrive pas à avoir le résultat escompté. 
    Par exemple: 
    lorsque je rentre 13 en base 10,je devrais avoir 1011 en base 2 mais je n'obtient que 10. 
    
    ou est mon erreur? 
    voici mon programme 
    merci 
    
    Description: 
    Ecrire un nombre en base 2 du dernier au premier bit.*/ 
    
    #include<stdio.h> 
    
    int main() 
    { 
    int n; 
    /*Demande d'un nombre au clavier*/ 
    printf("Changement de base: base10 <-> base2\n\n"); 
    printf("Introduire un nombre en base 10: "); 
    scanf("%d",&n); 
    while(n) 
    { 
    /*Ecrit le reste de la division par 2*/ 
    printf("%c",'0'+(n%2)); 
    /*divise le nombre par 2*/ 
    n/=2; 
    scanf("%c",&n); 
    } 
    return 0; 
    }


    Vous voulez convertir 13d en base 2, et lorsque vous rentrez 13 en base 10,vous obtenez 10, alors que vous pensez obtenir1011 en base 2 et vous avez 10. C'est bien cela ?

    En fait vous devrier obtenir 1101b. A moins que vous vouliez intervertir les bits de poids fort avec les faibles ?

    13d = (1* 2^3) + (1 * 2^2) + (0 * 2^1) + (1* 2^0) = 1101b, vous, vous obtenez 1011b = 11d.

    Quand on utilise la division et le reste, pour construire le nombre binaire, on part de la fin pour remonter.

    13/2 reste 1; 6/2 reste 0; 3/2 reste 1; et le bit de poids fort 1

    Voila pour la partie conversion décimal, binaire.

    Maintenant pour la partie du code : je ne suis pas spécialiste du C et il me semble que %c dans
    printf("%c",'0'+(n%2)
    ); permet d'afficher des caractères avec la fonction printf, hors, comment la fonction va-t-elle traduire (n%2) en caractère 13%2 reste 1, comment va être interprêyé la valeur décimale 1 en caractère ?

    Pour convertir, je serais amené à utiliser deux fonctions ; convertir valeur décimale (1) et (0) en caractère [fonction type pour convertir un nombre en chaîne de caractère, on utilise la fonction sprintf() (contenue dans stdio.h). Cette fonction fait partie de la norme ANSI-C, elle peut donc être utilisée sous n'importe quelle plateforme.] puis la concanation de chaine [ type fonction strcpy]

    A voir...
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Maintenant pour la partie du code : je ne suis pas spécialiste du C et il me semble que %c dans

    printf("%c",'0'+(n%2)

    ); permet d'afficher des caractères avec la fonction printf, hors, comment la fonction va-t-elle traduire (n%2) en caractère 13%2 reste 1, comment va être interprêyé la valeur décimale 1 en caractère ?


    En C le char c'est un entier plus court, qui peut servir quand on veut utiliser des entiers non signés jusqu'à 255 ou signé de -128 à 127

    quand on écrit '0' en fait la variable contient le caractère zéro
    mais on pourra écrire aussi
    char c = 48
    printf("%c",c);

    et il va afficher zéro et pas 48
    pour qu'il affiche 48 on doit écrire
    printf("%d",c);
    lami20j@debian:~/bin/langage_C/k_et_r$ cat char2int.c
    #include <stdio.h>
    
    int main ()
    {
      int reste, zero;
      char c = 48;
    
      printf("c = %c\n",c);
      printf("c = %d\n",c);
      printf ("\n==============================\n\n");
    
    /* le reste et 0 */
      zero = '0';
      reste = 0;
      printf ("zero = %c\n", zero);
      printf ("zero_ascii = %d\n", zero);
      printf ("reste = 0 ; '0' + reste = %d + %d = %c\n",zero,reste, zero + reste);
    /* le reste et 1 */
      reste = 1;
      printf ("\n==============================\n\n" "zero = %c\n", zero);
      printf ("zero_ascii = %d\n", zero);
      printf ("reste = 1 ; '0' + reste = %d + %d = %c\n",zero,reste, zero + reste);
    return 0;
    }
    lami20j@debian:~/bin/langage_C/k_et_r$ ./char2int
    c = 0
    c = 48
    
    ==============================
    
    zero = 0
    zero_ascii = 48
    reste = 0 ; '0' + reste = 48 + 0 = 0
    
    ==============================
    
    zero = 0
    zero_ascii = 48
    reste = 1 ; '0' + reste = 48 + 1 = 1
    

    0