私は言うように適切なバイト配列の初期化を見てきました
byte[] a = new byte[8];
しかし、これはどういう意味ですか?
byte[] bitfield = new byte [0xFFFFFFF/8];
n = 18; // some integer
bitfield [n / 8] |= 1 << (n % 8);
ここでの意味も説明してください0xFFFFFFF/8
。
私は言うように適切なバイト配列の初期化を見てきました
byte[] a = new byte[8];
しかし、これはどういう意味ですか?
byte[] bitfield = new byte [0xFFFFFFF/8];
n = 18; // some integer
bitfield [n / 8] |= 1 << (n % 8);
ここでの意味も説明してください0xFFFFFFF/8
。
0xFFFFFFF/8
単に値 (268435455) を 8 で割ったもので、配列をそのサイズに初期化します (もちろん、切り捨てられます)。
次のステップでは、切り捨てによりn
element n/8
、または 2 を取得して設定し、ビットごとの OR を1<<(n%8)
左ビットまたは 1 にシフトした同じ要素とし(n%8)
ます。これは次と同等です。
bitfield[n/8] = bitfield[n/8] | (1 << (n % 8))
は、 を 8で割ったときの余りに1<<(n%8)
等しいことに注意してください。2^(n%8)
(n%8)
n
簡単に言えば、詳細には触れずに、その構造はバイト配列でビットセットを表し、位置に基づいて個々のビットへのランダム アクセスを可能にします。
0xFFFFFFFF
16 進数の整数リテラルです。次に、それを 8 で割ります。