似乎无法使用左移或右移

Can't seem to use left or right shift

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

我可以使用 ORANDEXCLUSIVE OR 就好了,但是当我尝试使用 >><< 进行移位操作时,我得到一个错误说

Error: no operator "<<" matches these operands

我的代码如下所示:

#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;
}

根本没有定义将 std::bitset 移动另一个 std::bitset 的运算符。唯一的移位运算符是为 std::size_t 类型的参数定义的,例如 http://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt.

如果您确实需要,您可以随时自己编写运算符。最好是模板化:)

#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;
}

没有为位集定义此运算符 然而 class 有以下成员 operator

bitset<N> operator<<(size_t pos) const noexcept;

因此,要使轮班有效,您只需将 test2 替换为 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;
}

输出为

00001010