2

我正在处理一个任务,我必须编写一个 C 函数,通过找到最高有效设置位并返回该位的位置来计算无符号整数n的 log2。例如,如果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 回答