我正在处理一个赋值,其中我必须编写一个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);
}发布于 2012-09-16 18:25:52
您有一个无限循环,因为您从不更改n的值,而不是n >> 1;,而是使用n = n >> 1。
发布于 2012-09-16 18:27:07
看看你的时间循环。你做n >> 1,但你从不分配它。
https://stackoverflow.com/questions/12449469
复制相似问题