我正在使用一个赋值,我必须编写一个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);
}
答案 0 :(得分:3)
你有一个无限循环因为你永远不会改变n的值。而不是n >> 1;
使用n = n >> 1
。
答案 1 :(得分:1)
查看你的while循环。你做n >> 1
但你永远不会分配它。