我正在处理一个任务,我必须编写一个 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);
}