bitsets二进制AND操作

时间:2011-10-16 10:56:50

标签: c++ bitset

我写了以下几行:

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'。我错过了什么基本概念?

2 个答案:

答案 0 :(得分:6)

逻辑AND 添加。

具体地,

  0000
& 0001
------
= 0000

这解释了为什么你总是得到0000

逻辑AND只查看两个位集中的每个位,并且只有在其他两个向量中该位为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;
}

Output

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

答案 1 :(得分:0)

在第一个循环周期 bitvec = 0000 另外= 0001

0000 AND 0001操作将以0000生成,您将0000分配给bitvec,并在所有下一个循环周期重复执行历史记录。

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