Легко. Використовуйте порозрядне І для порівняння вашого числа зі значенням 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;