Facile. Utilisez un ET au niveau du bit pour comparer votre nombre avec la valeur 2 ^ bitNumber, qui peut être calculée à moindre coût par décalage de bits.
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
EDIT: Pour ajouter un peu plus de détails car il y a beaucoup de réponses similaires sans explication:
Un ET au niveau du bit compare chaque nombre, bit par bit, à l'aide d'une jointure ET pour produire un nombre qui est la combinaison de bits où le premier bit et le deuxième bit à cet endroit ont été définis. Voici la matrice logique de la logique ET dans un "quartet" qui montre le fonctionnement d'un ET au niveau du bit:
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
Dans votre cas, nous comparons le nombre que vous avez passé avec un nombre dont seul le bit que vous souhaitez rechercher est défini. Disons que vous recherchez le quatrième bit:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
Le décalage de bits, pour produire le nombre que nous voulons comparer, est exactement ce à quoi cela ressemble: prenez le nombre, représenté comme un ensemble de bits, et décalez ces bits vers la gauche ou la droite d'un certain nombre de places. Parce que ce sont des nombres binaires et que chaque bit est donc une puissance de deux supérieure à celle à sa droite, le décalage de bits vers la gauche équivaut à doubler le nombre une fois pour chaque lieu décalé, ce qui équivaut à multiplier le nombre par 2 ^ x. Dans votre exemple, à la recherche du quatrième bit, nous effectuons:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
Vous savez maintenant comment cela se fait, ce qui se passe au bas niveau et pourquoi cela fonctionne.
var bit = (b & (1 << bitNumber-1)) != 0;