4

次の行を書きました。

std::bitset<4> bitvec;  //bitset 0000
std::bitset<4> addition; //bitset 0000

addition.set(0); //setting the least significant bit

std::cout << addition << std::endl; //output 0001
std::cout << std::endl;

for(int x = 0; x != 16; ++x) { //addition loop
    std::cout << bitvec << std::endl; //output
    bitvec &= addition; //binary AND
}

std::cout << std::endl;

出力は次のようになると予想していました。

0000
0001
0010
0011
0100
0101
....

しかし、ループは「0000」を出力するだけです。欠けている基本的な概念は何ですか?

4

2 に答える 2

6

論理積は足し算ではありません

具体的には、

  0000
& 0001
------
= 0000

これは、常に取得する理由を説明しています0000

論理 AND は、両方のビットセットの各ビットを調べ、そのビットが他の両方のベクトルで 1 の場合にのみ 1 を出力します。例として:

  1001
& 1100
------
= 1000

最初のビットが 1 である理由は、他のビットセットの最初のビットが 1 であるためです。ビットセットの 1 つがその位置に 0 を持っているため、残りは 0 です。

加算が必要な場合は、ビットセットを使用せず、加算のみを使用してください。

unsigned long a = 0;

for (int i = 0; i < 16; ++i)
{
    std::cout << std::bitset<4>(a) << std::endl;
    ++a;
}

出力:

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
于 2011-10-16T11:02:02.800 に答える
0

最初のループ サイクルで bitvec =0000 加算 =0001

0000 AND 0001操作は次のようになり、次のすべてのループサイクルで繰り返されるtoと history を0000割り当てます。0000bitvec

期待される結果は、単純なインクリメント操作または +1 加算の結果であり、基本的にxはバイナリ形式で印刷するだけです。bitwise で何をしようとしていますANDか?

于 2011-10-16T11:01:04.473 に答える