最上位のセットビットを見つけてそのビットの位置を返すことにより、符号なし整数nのlog2を計算するC関数を作成する必要がある割り当てを使用しています。たとえば、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);
}