我写了以下几行:
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”。我缺少什么基本概念?
逻辑与是not添加。
具体来说,
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;
}
Output http://ideone.com/txuY8:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)