двоичные биты И операция - PullRequest
       20

двоичные биты И операция

4 голосов
/ 16 октября 2011

Я написал следующие строки:

std::bitset<4> bitvec;  //bitset 0000
std::bitset<4> addition; //bitset 0000

addition.set(0); //setting the least significant bit

std::cout << addition << std::endl; //output 0001
std::cout << std::endl;

for(int x = 0; x != 16; ++x) { //addition loop
    std::cout << bitvec << std::endl; //output
    bitvec &= addition; //binary AND
}

std::cout << std::endl;

и ожидал, что результат будет:

0000
0001
0010
0011
0100
0101
....

Но цикл просто выводит '0000'.Какую базовую концепцию мне не хватает?

Ответы [ 2 ]

6 голосов
/ 16 октября 2011

Логическое И это не сложение.

В частности,

  0000
& 0001
------
= 0000

Что объясняет, почему вы всегда получаете 0000.

Логическое И просто просматривает каждый бит в обоих наборах битов и выдает только 1, если этот бит равен 1 в обоих других векторах. Как пример:

  1001
& 1100
------
= 1000

Причина, по которой первый бит равен 1, заключается в том, что первый бит в других наборах битов равен 1. Остальные равны 0, поскольку один из наборов битов имеет 0 в этой позиции.

Если вы хотите сложение, не используйте битовый набор, просто используйте сложение.

unsigned long a = 0;

for (int i = 0; i < 16; ++i)
{
    std::cout << std::bitset<4>(a) << std::endl;
    ++a;
}

выход

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0 голосов
/ 16 октября 2011

в первом цикле цикла bitvec = 0000 сложение = 0001

Операция

0000 AND 0001 приведет к 0000, и вы назначите 0000 на bitvec и история будет повторяться во всех следующих циклах цикла.

Ваши ожидаемые результаты являются результатом простой операции приращения или добавления +1, в основном это просто x в двоичном формате. Что вы пытаетесь сделать с побитовой AND?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...