似乎无法使用左移或右移

时间:2015-04-22 07:37:43

标签: c++ bit-shift bitset

我只是在c ++中使用std::bitset玩了一下(没有双关语),我遇到了问题。

我可以正常使用ORANDEXCLUSIVE 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;
}

3 个答案:

答案 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;
}