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

如何判断long变量中存储的地址值是32位还是64位?

long类型存储地址的位宽检测方案

核心判断逻辑

32位地址的有效数值最大为2^32 - 1,即十六进制的0xFFFFFFFF,只要long变量中存储的地址原始值超过这个阈值,就属于64位地址。

各语言实现示例

C/C++ 实现

  • 注意要将long强转为无符号类型,避免符号位干扰判断
#include <stdio.h>

int get_address_bit_width(long addr) {
    unsigned long unsigned_addr = (unsigned long)addr;
    // 超过32位地址最大值则判定为64位
    return unsigned_addr > 0xFFFFFFFFUL ? 64 : 32;
}

int main() {
    long a = 0x06000000;
    long b = 0x13FFF0000;
    printf("a是%d位地址\n", get_address_bit_width(a)); // 输出32
    printf("b是%d位地址\n", get_address_bit_width(b)); // 输出64
    return 0;
}

Java 实现

  • Java的long默认为64位有符号类型,直接比较即可
public class AddressWidthCheck {
    public static int getAddressBitWidth(long addr) {
        return addr > 0xFFFFFFFFL ? 64 : 32;
    }

    public static void main(String[] args) {
        long a = 0x06000000L;
        long b = 0x13FFF0000L;
        System.out.println("a是" + getAddressBitWidth(a) + "位地址");
        System.out.println("b是" + getAddressBitWidth(b) + "位地址");
    }
}

注意事项

如果long变量存储的地址存在高位符号扩展的情况,需要先清理掉高位无效的扩展位后再执行判断,否则会出现误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:57:04