[英]Can't seem to use left or right shift
我只是在C ++中用std::bitset
玩了一點(沒有雙關語),我遇到了一個問題。
我可以使用OR
, AND
和EXCLUSIVE 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.