Bonsoir
je voudrais savoir s'il était possible de connaitre l’état d'un des bits d'un integer ?
par exemple, j'ai
comment savoir si le bit 2 de mon integer est actif ?Code:int toto = 3
merci
@++
KaloOopS
Version imprimable
Bonsoir
je voudrais savoir s'il était possible de connaitre l’état d'un des bits d'un integer ?
par exemple, j'ai
comment savoir si le bit 2 de mon integer est actif ?Code:int toto = 3
merci
@++
KaloOopS
Désolé j'avais pas assez cherché sur le net ...
Merci Shakespeare ...
si jamais ça vous intéresseCode:
1
2
3
4
5
6
7
8
9
10
11 void Main() { //0x05 = 101b Console.WriteLine(IsBitSet(0x05, 0)); //True Console.WriteLine(IsBitSet(0x05, 1)); //False Console.WriteLine(IsBitSet(0x05, 2)); //True } bool IsBitSet(byte b, byte nPos){ return new BitArray(new[]{b})[nPos]; }
@++
KaloOopS
PS : pas mal le concept de la question et de l'auto-réponse non ??:mouarf:
Utiliser un BitArray pour ça, c'est un peu lourd... Normalement les manipulations de bit ça se fait avec les opérateurs binaires (&, |, ~, <<, >>).
Code:
1
2
3
4
5 bool IsBitSet(byte b, byte nPos) { byte mask = (byte)(1 << nPos); return (b & mask) != 0; }
Tomlev a raison. Cela dit son exemple est peut-être lourd pour un néophyte.
L'opérateur "&" (ET) effectue une comparaison bit à bit : dans le résultat un bit est vrai seulement s'il était vrai dans les deux opérandes.
Prenons le nombre 13 (8 + 4 + 1) = 1101 en binaire.
Mettons qu'on veuille tester si le troisième bit (4 = 0100) est vrai.
13 & 4 = 1101 & 0100 = 0100
Autrement dit "x & 4" est différent de 0 si et seulement si le troisième est vrai dans x.
Pour tester si le premier bit est vrai : (i & 1) != 0
Pour tester si le second bit est vrai : (i & 2) != 0
Pour tester si le troisième bit est vrai : (i & 4) != 0
Pour tester si le quatrième bit est vrai : (i & 8) != 0
Pour tester si le premier et le quatrième bit sont tous les deux vrais : (i & 9) != 0
Bonsoir
Je connais bien le principe des masques et des ROL et ROR, mais dans l'automatisme ... (normal c'est mon boulot ;) )
Merci pour vos exemples et explications
@++
KaloOopS
Ok merci pour cette précision :oops:
@++
KaloOopS