我正在處理一個任務,我必須編寫一個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);
}
'N >> 1;' - >'N >> = 1;' – Mysticial
的事實,你的程序暫停,可能是一個問題,但它不是停滯的問題。 – sepp2k
+1 @Mysticial。而user167037,如果你打開更多的警告,你可能會得到一些關於你的原始程序的「未使用的表達結果」。 '鐺'默認警告,甚至。 –