Bonjour,
je recherche une petite fonction écrite en C(j'utilise C18)qui me permetterai de convertir un mot binaire en décimal.
Je vous remercie d'avance.
Jorg1n
PS:dsl je me suis trompé d'endroit pour le poster...
Version imprimable
Bonjour,
je recherche une petite fonction écrite en C(j'utilise C18)qui me permetterai de convertir un mot binaire en décimal.
Je vous remercie d'avance.
Jorg1n
PS:dsl je me suis trompé d'endroit pour le poster...
voici un code qui lit un binare et envoie un decimal.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 /****************************************************/ /*Programme qui convertit un binaire en décimal */ /****************************************************/ #include <stdio.h> int main(void) { char leBinaire; int leDecimal = 0; while (leBinaire != '\n') { scanf("%c",&leBinaire); if (leBinaire == '1') leDecimal = leDecimal * 2 + 1; else if (leBinaire == '0') leDecimal *= 2; } printf("%d\n", leDecimal); return 0; }
Simpa comme programme :king:
Ce serait possible d'envoyer sa réciproque?
(conversion décimale à binaire)
Attention, il faut savoir ce qu'on veut quand on parle de "binaire->décimal".
Typiquement, l'ordinateur ne compte ni en "binaire", ni en "décimal". On va dire qu'il compte en natif, les notations binaire et décimale n'étant que des expressions de cela.
Donc, voici le programme décomposé en 4 fonctions:
Code:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 #include <stdio.h> /* Le code d'emprex, modifié */ int FromBinary(void) { int chiffreBinaire; int nombreNatif = 0; do { chiffreBinaire = getchar(); if(chiffreBinaire>='0' && chiffreBinaire<='1') { nombreNatif *= 2; nombreNatif += (chiffreBinaire - '0'); } } while(chiffreBinaire!= '\n'); return nombreNatif; } int FromDecimal(void) { int chiffreDecimal; int nombreNatif = 0; do { chiffreDecimal = getchar(); if(chiffreDecimal>='0' && chiffreDecimal<='9') { nombreNatif *= 10; nombreNatif += (chiffreDecimal - '0'); } } while(chiffreDecimal!= '\n'); return nombreNatif; } void ToDecimal(int nombreNatif) { char chiffresDecimaux[20]; int nChiffre = 0; /* Ici, on affiche les chiffres en ordre inverse qu'on les calcule. On utilise donc un tableau pour les mémoriser. */ /* Il faut un do-while ici pour afficher le 0 */ do { int chiffreDecimal = nombreNatif % 10; char leChiffre = (char)(chiffreDecimal + '0'); chiffresDecimaux[nChiffre] = leChiffre; nChiffre++; nombreNatif /= 10; } while(nombreNatif != 0); /* On affiche. */ while(nChiffre != 0) { nChiffre--; putchar(chiffresDecimaux[nChiffre]); } putchar('\n'); } void ToBinary(int nombreNatif) { /* Cette fonction d'affichage est pour des int de 32 bits. */ int iBit; for(iBit=0 ; iBit<32 ; iBit++) { int valeurBit = nombreNatif & 0x80000000; nombreNatif <<= 1; /* Décale le nombre d'un bit vers la gauche */ if(valeurBit==0) putchar('0'); else putchar('1'); } putchar('\n'); } void TestBase(void) { for(;;) { int nombre; fputs("Entrer un nombre en decimal (0 pour quitter): ", stdout); fflush(stdout); nombre = FromDecimal(); fputs("* En decimal: ", stdout); ToDecimal(nombre); fputs("* En binaire: ", stdout); ToBinary(nombre); if(nombre==0) break; fputs("Entrer un nombre en binaire: ", stdout); fflush(stdout); nombre = FromBinary(); fputs("* En decimal: ", stdout); ToDecimal(nombre); fputs("* En binaire: ", stdout); ToBinary(nombre); putchar('\n'); if(nombre==0) break; } }
voici une fonction qui fait l'inverse
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 /****************************************************/ /* */ /* fonction qui convertit un binaire en décimal */ /* */ /****************************************************/ int convertiseurBinaireDecimal() { char leBinaire; int leDecimal = 0; do { scanf("%c",&leBinaire); if (leBinaire == '1') leDecimal = leDecimal * 2 + 1; else if (leBinaire == '0') leDecimal *= 2; } while (leBinaire != '\n'); printf("%d\n", leDecimal); return leDecimal; }
petite correctionCode:
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 /****************************************************/ /* */ /* fonction qui convertit un décimal en binaire */ /* */ /****************************************************/ int convertiseurDecimalBinaire() { int leDecimal; int leBinaire = 2; scanf("%d", &leDecimal); while (leBinaire <= leDecimal) leBinaire *= 2; leBinaire /= 2; while (leBinaire != 0) { if (leBinaire <= leDecimal) { printf("1"); leDecimal -= leBinaire; } else printf("0"); leBinaire /= 2; } printf("\n"); return leBinaire; }
À quoi sert-il de retourner leBinaire ?
Pour moi, cette fonction pourrait aussi bien ne rien retourner du tout...
(et cette fonction ne convertit pas directement le décimal en binaire: Elle demande à scanf() de convertir le décimal en int, puis elle convertit le int en binaire...)
C:\Users\Jean Pierre\Desktop>bindeci
Entrer un nombre en decimal (0 pour quitter): 255
* En decimal: 255
* En binaire: 00000000000000000000000011111111
Entrer un nombre en binaire: 510
* En decimal: 2
* En binaire: 00000000000000000000000000000010
Entrer un nombre en decimal (0 pour quitter): 510
* En decimal: 510
* En binaire: 00000000000000000000000111111110
Entrer un nombre en binaire: 1020
* En decimal: 4
* En binaire: 00000000000000000000000000000100
Entrer un nombre en decimal (0 pour quitter): 1020
* En decimal: 1020
* En binaire: 00000000000000000000001111111100
Entrer un nombre en binaire: 1024
* En decimal: 2
* En binaire: 00000000000000000000000000000010
Pourquoi entres-tu des nombres en décimal quand le programme te demande d'entrer un nombre en binaire?
OUPS!