簡體   English   中英

似乎無法使用左移或右移

[英]Can't seem to use left or right shift

我只是在C ++中用std::bitset玩了一點(沒有雙關語),我遇到了一個問題。

我可以使用ORANDEXCLUSIVE OR很好,但是當我嘗試使用>><<進行移位操作時,出現錯誤提示

錯誤:沒有運算符“ <<”與這些操作數匹配

我的代碼如下所示:

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

未為位集定義此運算符,但是該類具有以下成員運算符

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

因此,您所需test2.to_ulong()就是將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM