Comment puis je écrire un programme qui convertir un nombre decimal en binaire sur 8 bit svp?
Comment puis je écrire un programme qui convertir un nombre decimal en binaire sur 8 bit svp?
Bonjour,
Avant de vouloir écrire un programme, sais-tu le faire à la main ?
Par exemple comment transformes-tu l'écriture décimale 112 en écriture binaire ?
Comment fais-tu avec 112 par exemple ?
Pour savoir la taille de ton nombre binaire, il faut calculer floor( log2(number) ) + 1 (<- si je ne me trompe pas )
Cette taille est importante , parce qu'il faut remplir par la fin si tu utilises la technique des divisions successives par 2 et/ ou connaître la limite de ta boucle de remplissage.
Mais également pour éventuellement faire l'allocation si ton nombre binaire est stocké dans 1 tableau.
Donc comme tu travailles sur 8 bits, tu peux simplifier les calculs et juste utiliser le type unsigned char pour limiter la plage des valeurs
Mais attention aux boucles infinies et alertes de cast
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 #include <stdio.h> #include <stdlib.h> void convert_decimal_to_binary(unsigned char number, char* binary) { if (binary != NULL) { if (number >= 128) { number -= 128; binary[0] = '1'; } else { binary[0] = '0'; } if (number >= 64) { number -= 64; binary[1] = '1'; } else { binary[1] = '0'; } if (number >= 32) { number -= 32; binary[2] = '1'; } else { binary[2] = '0'; } if (number >= 16) { number -= 16; binary[3] = '1'; } else { binary[3] = '0'; } if (number >= 8) { number -= 8; binary[4] = '1'; } else { binary[4] = '0'; } if (number >= 4) { number -= 4; binary[5] = '1'; } else { binary[5] = '0'; } if (number >= 2) { number -= 2; binary[6] = '1'; } else { binary[6] = '0'; } if (number == 1) { number -= 1; binary[7] = '1'; } else { binary[7] = '0'; } } } #define print_binary(binary, end_str) printf("%c%c%c%c%c%c%c%c%s", binary[0], binary[1], \ binary[2], binary[3], binary[4], binary[5], binary[6], binary[7], end_str) /*****************************************************************************/ /*********************************** Main **********************************/ /*****************************************************************************/ int main(int argc, char** argv) { char binary[8]; size_t number; for(number=0; number < 256; ++number) { convert_decimal_to_binary(number, binary); print_binary(binary, "\n"); } return EXIT_SUCCESS; }
Bonjour,
Il est également possible d’avoir une autre approche; celui d’user plus astucieusement les opérateurs permettant la manipulation bits à bits. En d’autres termes en usant des opérateurs tels que l’opérateur « AND » et un SHL ( décalage à gauche << ) appliquer à un masque seuls les bits adéquats serons positionnés à 1 et les autres forcés à zéro exemple bien en tendu qu'il faudra adapter.
Code C : 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 unsigned char *f_convertDecimalToBinary(size_t value){ errno = 0x0; size_t offset = 0x0; unsigned char *p = malloc( 0x400 * sizeof *p); if( NULL == p ){ (void)fprintf(stderr, "Error(%d)\t:%s\n", errno, strerror(errno) ); return NULL; } for( ; 0xB > offset; offset++ ){ *(p + offset) = (value & 0x400) ? '1' : '0'; value = (value << 0x1); } *(p + offset) = '\0';<div style="margin-left:40px">return p;</div>} int main( void ){ unsigned char *ret = NULL; for( size_t offset = 0x0; BUFSIZ > offset; offset++){ ret = f_convertDecimalToBinary(offset); if( NULL == ret ){ (void)fprintf(stderr, "Echec de la conversion\n"); return EXIT_FAILURE; } (void)fprintf(stderr, "%zu\t=\t%s\n", offset, ret); free(ret); ret = NULL; } return EXIT_SUCCESS; }
à bientôt
Celui qui peut, agit. Celui qui ne peut pas, enseigne.
Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
et les philosophes, qui ne connaissent rien sur tout.
George Bernard Shaw
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 #include <stdio.h> #include <stdlib.h> #include <string.h> char *int2bin(unsigned int n, char *str)/* recoit un unsigned pour traiter le cas des nombres negatifs */ { int offset = 0; do { str[offset++] = '0' + (n % 2); n /= 2; }while(n); str[offset] = '\0'; return strrev(str); } int main(int argc, char **argv) { char str[8 * sizeof(int) + 1]; printf("int2bin(atoi('%s')) -> %s\n", argv[argc-1], int2bin(atoi(argv[argc-1]), str)); return 0; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager