ビットを uint の配列にパックすることで、ビット ベクトルを実装しています。このgetBit(index)
関数は(array[cell] & (1 << bit)) >> bit
、ビットが設定されているかどうかを取得するために a を実行します。これは、MSB を除くすべてのビットで完全に機能します。うまくいかない例は以下の通りです。
array[cell] = 11111001 11100000 00000000 00000000
(1 << bit) = 10000000 00000000 00000000 00000000
& operation = 01111001 11100000 00000000 00000000
ビットごとの AND 演算が XOR のように動作しているように見える理由がわかりません。それかMSBのどちらかが設定されていません。誰が何が起こっているのか説明できますか?
編集:実際のコード
var cell:uint = int(index / 32);
var bit:uint = 32 - (index % 32) - 1;
return (array[cell] & (1 << bit)) >> bit;
うまくいかない例では、index = 0