Bonjour tout le monde,
voil�, je suis en train d'impl�menter une s�rie de fonctions pour manipuler des bits. Sur l'une d'entre elle, j'ai un gros doute. Il s'agit d'une fonction qui doit modifier un bit dans un octet. Comme param�tres, elle prend un char (nous supposerons ici qu'un char fait 8 bits), un int qui correspond � la position du bit � modifier, et un bool qui est la valeur que doit prendre le bit modifi� (false->0, true->1). Or je trouve la m�thode que j'utilise ne me plait pas, je suis s�r qu'on peut faire beaucoup plus simple (et rapide):
Voici ma fonction:
Si ce post vous int�resse et que vous �tes motiv� pour trouver, voici une fonction qui affiche un char sous forme binaire (de m�me, il est certainement possible de faire beaucoup plus simple que ce que j'ai fait):Code:
1
2
3
4
5
6
7
8
9
10 // c est le char que l'on va modifier // pos la position du bit a modifier // bit la valeur du bit a modifier void SetBit( char & c, const int pos, const bool bit = true ) { c = bit ? c|mask[pos] : ~(~c|mask[pos] ); } // mask est un tableau de 8 char initialisé ainsi: char mask[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
Voil�, donc si vous avez des id�es pour am�liorer ce code, ou si vous voyez des erreurs, n'h�sitez pas. :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // affiche un char sous forme binaire // par exemple, PrintBin( 0x3E ) va afficher '00111110' void PrintBin( const char c ) { for ( int i=0; i<8; i++ ) { if( (int) ( c & mask[i] ) == 0 ) { cout << "0"; } else { cout << "1"; } } cout << endl; }