2012-09-16 52 views
2

我正在處理一個任務,我必須編寫一個C函數來計算無符號整數的log2 n,方法是找到最重要的設置位並返回該位的位置。例如,如果n是17(0b10001),則函數應該返回4.按位移讓我的程序停止?

下面是我到目前爲止的代碼,但按位操作會使程序停止。通過第6-9行註釋掉循環,該程序正常工作。我無法理解爲什麼它會這樣做。有人能幫我嗎?

#include<stdio.h> 
#include<stdlib.h> 

int mylog2(unsigned int n) { 
    int log = 1; 
    while (n != 1) { 
     n >> 1; 
     log++; 
    } 
    return log; 
} 


int main() { 
    int a; 
    a = mylog2(17); 
    printf("%d", a); 
    getch(); 
    return(0); 
} 
+6

'N >> 1;' - >'N >> = 1;' – Mysticial

+0

的事實,你的程序暫停,可能是一個問題,但它不是停滯的問題。 – sepp2k

+1

+1 @Mysticial。而user167037,如果你打開更多的警告,你可能會得到一些關於你的原始程序的「未使用的表達結果」。 '鐺'默認警告,甚至。 –

回答

3

你有一個無限循環,因爲你永遠不會改變n的值。而不是n >> 1;使用n = n >> 1

+0

謝謝!這解決了它。 – user1676037

+0

@ user1676037:你不打算接受答案嗎? –

1

看看你的while循環。你做n >> 1,但你永遠不會分配它。

0

有很多更快的方式來獲得登錄ňhere