Легко. Используйте побитовое И, чтобы сравнить ваше число со значением 2 ^ bitNumber, которое можно дешево вычислить с помощью битового сдвига.
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
РЕДАКТИРОВАТЬ: Чтобы добавить немного больше деталей, потому что есть много похожих ответов без объяснения:
Поразрядное И сравнивает каждое число побитно, используя соединение И для получения числа, которое представляет собой комбинацию битов, в которой были установлены первый и второй бит в этом месте. Вот логическая матрица логики И в «полубайке», которая показывает операцию побитового И:
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
В вашем случае мы сравниваем переданное вами число с числом, в котором установлен только тот бит, который вы хотите найти. Допустим, вы ищете четвертый бит:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
Битовый сдвиг для получения числа, с которым мы хотим сравнивать, - это именно то, на что это похоже: возьмите число, представленное как набор бит, и сдвиньте эти биты влево или вправо на определенное количество разрядов. Поскольку это двоичные числа и каждый бит представляет собой степень двойки на одну большую, чем бит справа от него, сдвиг битов влево эквивалентен удвоению числа один раз для каждого сдвигаемого места, что эквивалентно умножению числа на 2 ^ х. В вашем примере, ища четвертый бит, мы выполняем:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
Теперь вы знаете, как это делается, что происходит на низком уровне и почему это работает.
var bit = (b & (1 << bitNumber-1)) != 0;