Facile. Usa un AND bit per bit per confrontare il tuo numero con il valore 2 ^ bitNumber, che può essere calcolato a buon mercato spostando il bit.
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
EDIT: Per aggiungere un po 'più di dettagli perché ci sono molte risposte simili senza spiegazione:
Un AND bit per bit confronta ogni numero, bit per bit, utilizzando un join AND per produrre un numero che è la combinazione di bit in cui sono stati impostati sia il primo che il secondo bit in quella posizione. Ecco la matrice logica della logica AND in un "nibble" che mostra il funzionamento di un AND bit per bit:
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
Nel tuo caso, confrontiamo il numero che hai passato con un numero che ha solo il bit che vuoi cercare impostato. Diciamo che stai cercando il quarto bit:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
Lo spostamento di bit, per produrre il numero con cui vogliamo confrontare, è esattamente quello che sembra: prendi il numero, rappresentato come un insieme di bit, e sposta quei bit a sinistra oa destra di un certo numero di posizioni. Poiché questi sono numeri binari e quindi ogni bit è una maggiore potenza di due rispetto a quello alla sua destra, lo spostamento di bit a sinistra equivale a raddoppiare il numero una volta per ogni posizione che viene spostata, equivalente a moltiplicare il numero per 2 ^ x. Nel tuo esempio, cercando il quarto bit, eseguiamo:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
Ora sai come si fa, cosa sta succedendo a basso livello e perché funziona.
var bit = (b & (1 << bitNumber-1)) != 0;