2015-04-22 6 views
1

Я просто играл немного (без каламбура) с std::bitset в C++, и я столкнулся с проблемой.Невозможно использовать сдвиг влево или вправо

я могу использовать 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; 
} 
+0

Вам не нужно больше кода? Потому что я не вижу '' 'в вашем коде – Morb

+0

О, извините. Он должен сказать << в ошибке. Я отредактирую его –

+1

Предположительно вы хотели 'test << test2.to_ulong();' – user657267

ответ

3

Существует просто такой оператор, определенный для смещения std::bitset другим std::bitset. Единственные сдвигающие операторы определены для аргументов типа std::size_t, см., Например, http://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt.

+0

Хорошо, спасибо. Я просто предположил, что вы можете использовать битсет для переключения другого битового набора –

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

Этот оператор не определен для BitSet Однако класс имеет следующий оператор член

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 

 Смежные вопросы

  • Нет связанных вопросов^_^