2015-11-07 53 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即2時,它應該給出0。因此,對於i = 1,只應打印01 here 0

回答

0

由於運算符優先級,你需要周圍使用&操作

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

沒有多餘的括號。