11
votes

Comment vérifier si un bit particulier est défini dans C #

en C #, j'ai une valeur de 32 bits que je stocke dans un int. J'ai besoin de voir si un bit particulier est défini. Le bit dont j'ai besoin est 0x00010000 code>.

Je suis venu avec cette solution: p>

Voici ce que je cherche: P>

int value = 0x102F1032;
value = value >> 16;
byte bits = (byte)value << 3;
bits == 8 ? true : false;


9 commentaires

Vous devez juste utiliser le Bitwise & Operator pour cela.


Vous ne pouvez pas écrire (numéro et 0x00010000)! = 0?


Juste hors de curiosité, même si le changement n'est pas le meilleur moyen de le faire, pourquoi n'avez-vous pas simplement choisi si le résultat était 1 après le premier quart de travail? C'est-à-dire pourquoi passer à gauche 3?


@AY OUI Logique impair pour passer à droite par une certaine quantité d'endroits puis changez immédiatement à gauche d'une autre quantité ...


@Ray je l'ai fait de cette façon, parce que l'un des autres bits pourrait être défini, j'ai fait le changement pour amener 0's pour que je puisse être sûr que pas d'autres bits ne soient définis. Si d'autres bits ont été définis, je ne sais pas quoi comparer. Si je le fais de cette façon, je suis sûr que ce sera 8.


@ user489041 Mais le bit à gauche de votre bit testé pourrait toujours être réglé.


Dupliqué possible de C # :: Vérification si un bit est défini ou pas


@RAY Je pensais que si je le montai à un octet, alors les bits à gauche seraient déposés? Mais c'est pourquoi je suis heureux d'avoir posé cette question à cette question. Je n'étais pas sûr sur un peu de cela.


@ user489041 Un octet serait toujours trop gros, car il y a 8 bits pas 4. Mais oui, je vois ce que vous essayez de faire maintenant.


9 Réponses :


2
votes

Vous pouvez simplement faire un bit et.

int result = yourByte & 16;
if (result != 0)
{
    // do what you need to when that bit is set
}


1 commentaires

Soyez juste prudent avec celui-ci. 0x10000! = 16.



16
votes

Vous pouvez utiliser le bitwise & Operateur:

int value = 0x102F1032;
int checkBit = 0x00010000;
bool hasBit = (value & checkBit) == checkBit;


0 commentaires

12
votes

C'est beaucoup plus facile que ça. Il suffit d'utiliser l'opérateur bitwise et comme celui-ci xxx


0 commentaires

4
votes

Vous pouvez simplement vérifier comme si:

bool bitSet = (value & 0x10000) == 0x10000;


0 commentaires


2
votes

Vous pouvez dire:

if( (number & 0x00010000 ) != 0 )
{
  //the bit is set...
}


0 commentaires

3
votes

Et si vous n'aimez pas l'approche du masque de bits:

int data = 0;

var bits = new BitArray(new int[] { data });

bits.Get(21);


0 commentaires

2
votes
int someInt = 8;
int BitToTest = 3;
bool isSet = (someInt & (1 << BitToTest)) != 0;
And it with the shifted value, bit is set if the answer is nonzero.
If you are doing one bit a lot use a constant for (1 << BitToTest), if a lot but different bits, a static array to look up 2 ^ BitToTest.

0 commentaires

1
votes

En outre, mais peut-être pas mieux, vous pouvez utiliser le Bitvector32 structure.

int value =  0x102F1032;
var vector = new BitVector32(value);
return vector[0x1000]; //true


0 commentaires