繁体   English   中英

按位移位会使我的程序停止吗?

[英]Bitwise shift makes my program 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);
}

您有一个无限循环,因为您永远不会更改n的值。 代替n >> 1; 使用n = n >> 1

查看您的while循环。 您执行n >> 1但从未分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM