You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编写无符号整数位反转程序输出结果错误问题求解

问题原因与修复方案

错误点

  • 核心错误在reverse_bits函数的循环逻辑:while (n > 0)的终止条件只会处理n二进制末尾到最高位1的部分,完全忽略了高位的0,不会将这些0对应的位置计入反转结果。
    你输入12时,二进制有效位仅为末尾4位1100,你的代码仅反转这4位得到0011也就是十进制3,和你得到的错误输出完全一致。示例要求反转全部16位(含高位12个0),你没有处理这些高位0,缺少了12次左移占位的步骤,结果自然不符合预期。
  • 额外注意:unsigned int的位长是平台相关的,常见为16位、32位、64位,要实现全位反转必须遍历所有位,而非仅遍历到n变为0。

修复后代码

#include <stdio.h>

//function prototype
unsigned int reverse_bits(unsigned int n);

int main(void) {
    unsigned int n;
    unsigned int bits;

    printf("Enter an unsigned integer: ");
    scanf("%u",&n);
    
    bits = reverse_bits(n);
    
    printf("%u\n",bits);

    return 0;
}

unsigned int reverse_bits(unsigned int n) {
    unsigned int reverse = 0;
    // 按当前平台unsigned int的总位数遍历,兼容16/32/64位场景
    int bit_count = sizeof(unsigned int) * 8;
    for (int i = 0; i < bit_count; i++) {
        reverse = reverse << 1;
        if((n & 1) == 1) {
            reverse = reverse | 1;
        }
        n = n >> 1;
    }
    return reverse;
}

效果验证

如果你的场景固定为16位unsigned int,把bit_count改为16即可。输入12测试时,循环执行16次,前12次处理高位的0,每次reverse左移1位补0,后4次处理1100,最终得到二进制0011000000000000,对应十进制12288,符合预期。

内容的提问来源于stack exchange,提问作者ulysessg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:03