簡単です。ビットごとのANDを使用して、数値を値2 ^ bitNumberと比較します。これは、ビットシフトによって安価に計算できます。
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
編集:説明のない同様の答えがたくさんあるので、もう少し詳細を追加するには:
ビットごとのANDは、各数値をビットごとに比較し、AND結合を使用して、その場所の最初のビットと2番目のビットの両方が設定されたビットの組み合わせである数値を生成します。以下は、ビットごとのANDの演算を示す「ニブル」内のAND論理の論理行列です。
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
あなたの場合、私たちはあなたが渡した数を、あなたが探したいビットだけがセットされている数と比較します。あなたが4番目のビットを探しているとしましょう:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
比較する数値を生成するためのビットシフトは、まさにそのように聞こえます。ビットのセットとして表される数値を受け取り、それらのビットを特定の数の場所で左または右にシフトします。これらは2進数であり、各ビットは右側のビットよりも2のべき乗が大きいため、左側へのビットシフトは、シフトされる各場所で1倍の数に相当し、数値を乗算するのと同じです。 2 ^ x。あなたの例では、4番目のビットを探して、以下を実行します。
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
これで、それがどのように行われ、低レベルで何が起こっているのか、なぜ機能するのかがわかりました。
var bit = (b & (1 << bitNumber-1)) != 0。