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
Partager