繁体   English   中英

为什么我的关于反转位的 C 代码不起作用?

[英]Why wont my C code about reversed bits work?

我正在编写代码来反转位相同但顺序相反的无符号整数。 我的代码在接受用户输入时不会停止运行。 我究竟做错了什么?

#include <stdio.h>

unsigned int reverse_bits(unsigned int n);

int main(void) {
        unsigned int n;
        printf("Enter an unsigned integer: ");
        scanf("%u",&n);
        printf("%u\n",reverse_bits(n));
        return 0;
}

unsigned int reverse_bits(unsigned int n) {
        unsigned int reverse = 0;
        while(n>0) {
                reverse <<= 1;
                if((n & 1) == 1) {
                        reverse = reverse^1;
                }
        }
        return reverse;
}

在您的程序中,while 条件正在检查 n 是否大于零。 但是,在循环内部,没有修改 n 的操作。 所以请尝试使用它。 它会起作用。

unsigned int reverse_bits(unsigned int n) {
    unsigned int reverse = 0;
    while (n>0) {
            reverse <<=1;
            if((n & 1) == 1) {
                    reverse = reverse | 1;
            }
            n=n>>1;

    }
    return reverse;

}

正如@Mark Benningfield 所说,您忘记在循环内修改n并且

反转字符串的最佳方法是:-

它仅在最左边的位为1时运行。

  unsigned int reverse_bits(unsigned int n) 
    {
        int reverse = 0;
        int x = 1;
        while ( n > 0 )
        {
            reverse = reverse << 1;
            if ( n & x )
                reverese = reverse | 1;
            n = n >> 1;
        }
        return reverse;

暂无
暂无

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

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