Fácil. Use un Y a nivel de bits para comparar su número con el valor 2^bitNumber, que se puede calcular de manera económica mediante el cambio de bit.
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
EDIT: Para añadir un poco más de detalle, porque hay una gran cantidad de respuestas similares con ninguna explicación:
Un bit a bit y lo compara cada número, bit por bit, utilizando un AND unirse para producir un número que es la combinación de bits donde se establecieron tanto el primer bit como el segundo bit en ese lugar. Aquí está la matriz lógica de la lógica AND en un "mordisco" que muestra el funcionamiento de una función Y:
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
En su caso, se compara el número que ha pasado con un número que tiene solamente el bit que desea buscar para el set Digamos que usted está buscando el cuarto bit:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
de desplazamiento de bits, para producir el número que queremos comparar en contra, es exactamente lo que parece: tomar el número, representado como un conjunto de bits, y desplaza esos bits hacia la izquierda o hacia la derecha en un cierto número de lugares. Debido a que estos son números binarios y cada bit es una potencia mayor de dos que la de su derecha, el cambio de bit a la izquierda equivale a duplicar el número una vez por cada lugar que se desplaza, lo que equivale a multiplicar el número por 2^x. En su ejemplo, buscando el cuarto bit, realizamos:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
Ahora sabes cómo se hace, lo que está pasando en el nivel bajo, y por qué funciona.
Debido a que faltan llaves (precedencia del operador) este código no se compila, debe ser 'var bit = (b & (1 << bitNumber-1))! = 0'; – bitbonk