我写了以下几行:
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'。我错过了什么基本概念?
答案 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;
}
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
做什么?