Łatwo. Użyj bitowego AND, aby porównać swoją liczbę z wartością 2 ^ bitNumber, którą można tanio obliczyć przez przesunięcie bitów.
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
EDYTUJ: Aby dodać trochę więcej szczegółów, ponieważ istnieje wiele podobnych odpowiedzi bez wyjaśnienia:
Bitowe AND porównuje każdą liczbę, bit po bicie, używając sprzężenia AND w celu uzyskania liczby będącej kombinacją bitów, w której ustawiono zarówno pierwszy, jak i drugi bit w tym miejscu. Oto macierz logiczna logiki AND w „nibble”, która przedstawia operację bitowego AND:
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
W twoim przypadku porównujemy podaną liczbę z liczbą zawierającą tylko ten bit, którego szukasz. Powiedzmy, że szukasz czwartego bitu:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
Przesuwanie bitów w celu uzyskania liczby, z którą chcemy porównać, jest dokładnie tym, co brzmi: weź liczbę, reprezentowaną jako zestaw bitów i przesuń te bity w lewo lub w prawo o określoną liczbę miejsc. Ponieważ są to liczby binarne, a więc każdy bit jest o jedną potęgę dwójki większy niż ten po prawej stronie, przesunięcie bitu w lewo jest równoważne dwukrotnemu podwojeniu liczby dla każdego przesuniętego miejsca, co jest równoznaczne z pomnożeniem liczby przez 2 ^ x. W Twoim przykładzie, szukając czwartego bitu, wykonujemy:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
Teraz wiesz, jak to się robi, co się dzieje na niskim poziomie i dlaczego to działa.
var bit = (b & (1 << bitNumber-1)) != 0;