0

私はC++で持っています:

typedef struct _msk {
char    abc[4];
//some more variables
}

_msk mr;

if (some condition >= 70) {
   mr.abc[0] |= 0xC0;   //C0 in binary 11000000
   mr.abc[1] |= 0x20;   //20 in binary   100000
   mr.abc[2] |= 0x44;   //44 in binary  1000100
}

ここでOR操作が行われ、その後値が保存されます。これらは配列内にあるため、メモリ内では (0th)11000000(1st)100000(2nd)1000100 のようになりますか? [4] に実際に格納できるビット数 (合計 0+1+2+3+4)。

Java の場合:

private BitSet abc = new BitSet(40);

ビットの更新または変更が必要な場合は、bitset クラスが提供する set メソッドまたは get メソッドを利用できます。Java では、OR 演算を実行する必要がある場合、同じ結果を得るためにサフィックスに 0 を追加する必要があります。C ++で回避できるのはどれですか?? ありがとう

4

2 に答える 2

1

それで、メモリでは、これらが配列にあるので、(0th)11000000(1st)100000(2nd)1000100のようになりますか?

ほぼ:(0th)11000000(1st)00100000(2nd)01000100

[4]に実際に格納できるビット数(合計0 + 1 + 2 + 3 + 4)。

0 + ... + 4ではなく、0 + ... + 3、サイズ8ビットの4文字= 32ビット(インデックス:0、1、2、3)

また、Javaでもビット演算子を使用できます。Javaコードに関して何を求めているのか完全にはわかりません。

于 2011-05-09T06:20:17.617 に答える
1

|= を使用しているため、実際には mr.abc[0] = mr.abc[0] | を実行しています。0xC0;

したがって、これは、結果が mr.abc[0] の元の値に依存することを意味します。これは、0 である場合とそうでない場合があります。

また、char(1 バイト) には 8 ビットあります。したがって、配列に 4 つの要素がある場合、合計で 32 ビットになります。

Java は、すべてのビット演算にまったく同じ表記法を使用します。BitSet でどこに行くのかわかりません。

于 2011-05-09T06:24:23.543 に答える