2015-11-07 4 views
0

Я написал ниже код в C++ для поиска индексов заданных битов в числах.Получение неправильного вывода при поиске индексов заданных битов - C++

#include<bits/stdc++.h> 
using namespace std; 
#define ll long long int 

int main(int argc, char const *argv[]) 
{ 
    for(ll i = 1; i < (1<<3); i++) 
    { 
     cout<<i<<" here "; 
     for(ll j = 0; j < 3; j++) 
     { 
      if(i&(1<<j) != 0) 
       cout<<j<<" "; 
     } 
     cout<<endl; 
    } 
    return 0; 
} 

выход, который я получаю (что неверно):

1 here 0 1 2 
2 here 
3 here 0 1 2 
4 here 
5 here 0 1 2 
6 here 
7 here 0 1 2 

тогда, если мы возьмем i = 1. Так как двоичное представление 1 равно 001, поэтому при выполнении поразрядного & с 010 i.e 2 оно должно указывать 0. Поэтому для i = 1 следует распечатать только 0, 1 here 0.

ответ

0

Благодаря оператору старшинства, вам нужно использовать

if ((i & (1 << j)) != 0) 

не лишние скобки вокруг оператора &.

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