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

十进制转二进制程序显示错误?0x80替换为0x80000000生效的原因

为什么用0x80无法正确输出long int的二进制?
#include <stdio.h>
#include <stdlib.h>

int main()
{
    long int x;
    x = 1000000;
    printf("%ld\n", x);
    for(int i = 0; i < 32; i++)
    {
        printf("%c", (x & 0x80)? '1' : '0');
        x <<= 1;
    }

    printf("\n");
    return 0;
}

核心原因:位掩码的位数不匹配

你的代码目标是输出32位long int的完整二进制,但0x80这个掩码只对应第7位(从0开始计数,2^7 = 128),而非32位整数的最高位(第31位)。

  • 当你用x & 0x80时,每次仅检查x的第7位是否为1,而非整个32位数值的最高位。初始值x=1000000的二进制仅占20位,前12位都是0,所以前24次循环中,第7位始终为0,输出全是0;直到移位到后续位时才会输出1,完全偏离了“从最高位到最低位输出完整二进制”的需求。
  • 换成0x80000000后,这个掩码对应32位整数的最高位(第31位)(2^31 = 2147483648,十六进制为0x80000000)。每次左移一位后,掩码会依次覆盖从最高位到最低位的每一位,这样就能正确输出32位的完整二进制表示。

补充说明

如果你的系统中long int是64位,对应的最高位掩码应该是0x8000000000000000,但你的循环只执行32次,所以0x80000000刚好匹配32位的输出需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:15:39