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.

逻辑与只查看两个位集中的每个位,如果该位在其他两个向量中均为 1,则仅输出 1。举个例子:

  1001
& 1100
------
= 1000

第一位为 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操作将导致您在所有下一个循环周期中0000分配0000to和历史重复。bitvec

您的预期结果是简单递增操作或 +1 加法的结果,基本上只是x二进制格式的打印。你想用 bitwise 做AND什么?

于 2011-10-16T11:01:04.473 回答