bonjour,
commen afficher un nombre en binaire avec printf?
decimal c'est %d ..... et pour le binaire?
bonjour,
commen afficher un nombre en binaire avec printf?
decimal c'est %d ..... et pour le binaire?
voici une fonction:
puis printf("%d",dtobin(ton_nombre_allant_de_0_à_255));
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 unsigned int dtobin(unsigned char h) { double n; unsigned int b=0; for(n=0;n<=7;n++) { b+=(pow(10,n)*(h%2)); h/=2; } return b; }
[Balises CODE ajoutées par Anomaly - Merci d'y penser à l'avenir]
Elle a le mérite de ne pas utiliser pow, ni de modulo, mais seulement des opérations bit à bit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void affichebin(unsigned n) { unsigned bit = 0 ; unsigned mask = 1 ; for (int i = 0 ; i < 32 ; ++i) { bit = (n & mask) >> i ; printf("%d", bit) ; mask <<= 1 ; } }
Autre avantage : elle traite tous les entiers (donc ceux > 255 aussi!)
@bakonu: Ça, c'est du vrai Binaire Codé Décimal!![]()
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 char* strbin(const unsigned int n, const short nbBits ) { unsigned bit = 0 ; unsigned mask = 1 ; char* buffer = calloc( nbBits + 1, sizeof( char ) ); int i; for (i = 0 ; i < nbBits ; ++i) { bit = (n & mask) >> i ; buffer[ nbBits - 1 - i ] = (char)('0' + bit); mask <<= 1 ; } buffer[nbBits] = '\0'; return buffer; }
Salut,
Bakonu, ta fonction ne passe pas mes tests unitaires sauf erreur. Je l'ai modifiée pour ne pas inclure math, et elle passe les tests, ce que je ne m'explique d'ailleurs pas .Super idée, le Binaire Codé Décimal!
A+
Pfeuh
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 #include <stdlib.h> #include <stdio.h> #include <assert.h> unsigned int dtobin(unsigned char rawvalue) { unsigned int tempvalue = 0; unsigned int weight = 1; unsigned int counter = 0; while(counter < 8) { tempvalue += weight * (rawvalue % 2); rawvalue >>= 1; weight *= 10; counter++; } return tempvalue; } int main(void) { assert(dtobin(0) == 0); assert(dtobin(1) == 1); assert(dtobin(3) == 11); assert(dtobin(128) == 10000000); assert(dtobin(129) == 10000001); assert(dtobin(131) == 10000011); assert(dtobin(255) == 11111111); return 0; }
Partager