似乎无法使用左移或右移
Can't seem to use left or right shift
我只是在用 c++ 中的 std::bitset
玩了一下(没有双关语意),我 运行 遇到了一个问题。
我可以使用 OR
、AND
和 EXCLUSIVE 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
我只是在用 c++ 中的 std::bitset
玩了一下(没有双关语意),我 运行 遇到了一个问题。
我可以使用 OR
、AND
和 EXCLUSIVE 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