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 Je suis venu avec cette solution: p> Voici ce que je cherche: P> 0x00010000 code>.
int value = 0x102F1032;
value = value >> 16;
byte bits = (byte)value << 3;
bits == 8 ? true : false;
9 Réponses :
Vous pouvez simplement faire un bit et.
int result = yourByte & 16; if (result != 0) { // do what you need to when that bit is set }
Soyez juste prudent avec celui-ci. 0x10000! = 16.
Vous pouvez utiliser le bitwise & Operateur:
int value = 0x102F1032; int checkBit = 0x00010000; bool hasBit = (value & checkBit) == checkBit;
C'est beaucoup plus facile que ça. Il suffit d'utiliser l'opérateur bitwise et code> comme celui-ci
Vous pouvez simplement vérifier comme si:
bool bitSet = (value & 0x10000) == 0x10000;
Vous pouvez dire:
if( (number & 0x00010000 ) != 0 ) { //the bit is set... }
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);
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.
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
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.