extraction de bits d'un short (ou d'un char)
Hello,
Je voudrais extraire des booléens (décrivant des bits) depuis un short (qui décrit un registre de 2 octets).
:) Exemple:
Code:
1 2 3 4 5
|
Short Val=0x0255;
Bool Bit;
Bit=Val[2]; |
:x En fait, je voulais m'affranchir d'avoir à créer un tableau de booleens pour extraire les éléments 'bit à bit '. Existe t-il un moyen d'accéder aux éléments d'un short/int de la même manière que pour les string / char ?
Merci pour votre réponse. :roll:
Re: extraction de bits d'un short (ou d'un char)
Citation:
Envoyé par julie20
Je voudrais extraire des booléens (décrivant des bits) depuis un short (qui décrit un registre de 2 octets).
:) Exemple:
Code:
1 2 3 4 5
|
Short Val=0x0255;
Bool Bit;
Bit=Val[2]; |
:x En fait, je voulais m'affranchir d'avoir à créer un tableau de booleens pour extraire les éléments 'bit à bit '. Existe t-il un moyen d'accéder aux éléments d'un short/int de la même manière que pour les string / char ?
Le comportement des opérateurs binaires n'est portable que sur les entiers non signés.
L'opérateur binaire & permet de tester la valeur d'un ou plusieurs bits :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
unsigned x = 0xC0;
if (x & 0x80)
{
puts ("le bit 7 est a 1\n");
}
else
{
puts ("le bit 7 est a 0\n");
} |
L'opérateur binaire ! (à ne pas confondre avec ~) permet de transformer 0 en 1 et <>0 en 0
Comme dans ce cas, x & 0x80 vaut 0x80 (soit <>0), !(x & 0x80) vaut donc 0 et !!(x & 0x80) vaut donc 1.
On peut donc écrire tout simplement
Code:
1 2 3 4
|
unsigned x = 0xC0;
printf ("le bit 7 est a %d\n", !!(x & 0x80)); |
0x80 (bit 7) peut s'écrire (1u << 7). Je te laisse donc ecrire le code qui retourne le bit n d'un entier non signé.