2

最上位のセットビットを見つけてそのビットの位置を返すことにより、符号なし整数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);
}
4

2 に答える 2

3

nの値を変更することはないため、無限ループが発生します。n >> 1;使用する代わりにn = n >> 1

于 2012-09-16T18:25:52.607 に答える
1

whileループを見てください。あなたはそうしますn >> 1が、あなたはそれを決して割り当てません。

于 2012-09-16T18:27:07.380 に答える