我只是在c ++中使用std::bitset
玩了一下(没有双关语),我遇到了问题。
我可以正常使用OR
,AND
和EXCLUSIVE OR
但是当我尝试使用>>
和<<
进行轮班操作时出现错误说
错误:没有操作员&#34;&lt;&lt;&#34;匹配这些操作数
我的代码如下:
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
bitset<8> test = 0x05;
bitset<8> test2 = 0x00;
bitset<8> lshift = test << test2;
cout<<lshift<<endl;
system("PAUSE");
return 0;
}
答案 0 :(得分:3)
根本没有定义此类运算符来将std::bitset
转换为另一个std::bitset
。唯一的移位运算符是为std::size_t
类型的参数定义的,例如参见http://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt。
答案 1 :(得分:2)
如果您真的需要,您可以自己编写操作员。最好是模板化:))
#include <iostream>
#include <bitset>
using namespace std;
bitset<8> operator<<(bitset<8>& rhs, bitset<8>& lhs) {
return rhs << (std::size_t)lhs.to_ulong();
}
int main()
{
bitset<8> test = 0x01;
bitset<8> test2 = 0x01;
bitset<8> lshift = test << test2;
cout << lshift << endl;
return 0;
}
答案 2 :(得分:0)
未为bitset定义此运算符 但是,该类具有以下成员运算符
bitset<N> operator<<(size_t pos) const noexcept;
所以你需要的转变才能取代test2
的{{1}}
test2.to_ulong()
这是一个示范程序
bitset<8> lshift = test << test2.to_ulong();
输出
#include <iostream>
#include <bitset>
const size_t N = 8;
int main()
{
std::bitset<N> test = 0x05;
std::bitset<N> test2 = 0x01;
std::bitset<N> lshift = test << test2.to_ulong();
std::cout << lshift << std::endl;
return 0;
}