按位移动会使程序暂停?

时间:2012-09-16 18:23:26

标签: c bit-manipulation shift halt

我正在使用一个赋值,我必须编写一个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);
}

2 个答案:

答案 0 :(得分:3)

你有一个无限循环因为你永远不会改变n的值。而不是n >> 1;使用n = n >> 1

答案 1 :(得分:1)

查看你的while循环。你做n >> 1但你永远不会分配它。