De base 10 en base 2 du dernier bit au1er bit
Résolu/Fermé
pépereF
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
25 janvier 2008
-
24 mars 2007 à 10:04
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 24 mars 2007 à 12:17
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 24 mars 2007 à 12:17
A voir également:
- Algorithme conversion base 10 en base 2 pascal
- Clé windows 10 gratuit - Guide
- Windows 10 gratuit - Guide
- Turbo pascal download - Télécharger - Édition & Programmation
- Base de registre windows 10 - Guide
- Mon pc s'allume mais ne démarre pas windows 10 - Guide
3 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
24 mars 2007 à 11:05
24 mars 2007 à 11:05
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; }
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...
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
24 mars 2007 à 12:17
24 mars 2007 à 12:17
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);
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