2010-07-12 75 views
0

可能重複:
question about leading zeros爲什麼我的函數返回錯誤的值?

正如stackoverflow.com/questions/3232534/question-about-leading-zeros

從黑客的喜悅尾隨零,二進制搜索次數:

#include <iostream> 
using namespace std; 

int ntz(unsigned x){ 

int n; 

if (x==0) return 32; 
n=1; 
if ((x & 0x0000FFFF))==0) {n=n+16; x=x>>16;} 
if ((x & 0x000000ff)==0) {n=n+8;x>>=8;} 
if (x &0x0000000F)==0) {n=n+4; x>>=4;} 
if ((x & 0x00000003)==0) { n=n+2; x>>=2;} 
    return n-(x &1); 
} 

int main(){ 

unsigned x; 
cin>>x; 
cout<<ntz(x)<<endl; 

    return 0; 
} 

當我進入8使其返回8,當我進入9相同的結果,爲什麼?

+0

無法解釋 - 張貼當你發佈的代碼有語法錯誤(你應該使用拷貝正膏),當它以直截了當的方式得到預期產出時。 – 2010-07-12 22:30:49

回答

2

首先,你的代碼不能編譯。第9和11行中的括號沒有正確平衡。

這就是說,修復錯誤和編譯後,我得到如下結果:

$ ./a.out 
8 
3 

$ ./a.out 
9 
0 
+0

yes danben我測試過的問題是我沒有創建新的項目只是刪除了同一個項目中的代碼,並在其中寫入了另一個代碼,所以它重複了舊代碼的結果 – 2010-07-12 22:39:55

+0

所有這些意味着您在更改後沒有構建項目代碼(假設我正確理解)。 – Cogwheel 2010-07-12 22:41:31

+0

是的,它現在是如此工作謝謝 – 2010-07-12 22:42:58

相關問題