|
|
|
|
pépereF, le samedi 24 mars 2007 à 10:04:49Configuration: Windows XP Internet Explorer 6.0
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;
}
lami20j |
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... |
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
lami20j |
| 11/04 13h03 | Planifier une sauvegarde de données | Sécurité |
| 23/07 15h07 | [Sécurité] Droits d'accès - GNU/Linux | Sécurité |
| 05/01 19h00 | [Spywares] Méthodes de désinfection | Spywares |
| 09/04 21h47 | Comment bloquer les fenêtres CiD ? | Spywares |
| 16/08 21h40 | Choisir une distribution Linux | Distributions |
| 03/09 01h15 | Dernier firefox à ce jour pour Mandriva 10.2 | 68 |
| 02/07 14h17 | Windows live hotmail sur mac OS 10.2.8 | 5 |
| 20/04 12h46 | Est-ce possible d'evoluer de 10.2.8 à 10.3? | 18 |
| 17/04 12h10 | Utiliser le open suse 10.2 x86 sur AMD 64 | 9 |
![]() | Visual Basic Express 2005 - Le langage de programmation Visual Basic est historiquement dans les gènes de la société Microsoft. Avec plus de 30.000... | Catégorie: Visual Basic Licence: Freeware/gratuit |
![]() | BitDefender - BitDefender est la version gratuite de l'antivirus de l'éditeur Softwin. Il possède des fonctionnalités équivalentes à... | Catégorie: Antivirus Licence: Freeware/gratuit |
![]() | K-Lite Mega Codec Pack - K-Lite Codec Pack est une collection de codecs et de filtres nécessaires pour encoder ou décoder des formats audio ou vidéo.... | Catégorie: Codecs Licence: Open Source |
![]() | Blender pour Mac - Blender est un logiciel libre permettant de modéliser en 3D, de créer des animations, d'effectuer des rendus réalistes ou de... | Catégorie: 3D Licence: Open Source |
![]() | 3Com Baseline Switch 2226 | Catégorie: Hub/Switch | 173.39 € PriceMinister |
![]() | 3Com SuperStack 3 Baseline | Catégorie: Hub/Switch | |
![]() | 3Com Baseline Switch 2250 | Catégorie: Hub/Switch | |
![]() | 3Com Baseline 48-Port 10/100 | Catégorie: Hub/Switch |