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

Windows 64位系统下LONG_MIN与LONG_MAX取值异常咨询

问题分析:Windows 64位与在线编译器中long类型的取值范围差异

问题场景还原

在Windows 64位系统运行以下C代码:

int main()
{
    long long_min = LONG_MIN;
    long long_max = LONG_MAX;

    printf("Minimum value of long: %ld \n", long_min);
    printf("Maximim value of long: %ld \n", long_max);
    printf("Printing the size of long: %zu\n", sizeof(long_max));

    printf("\n----------------------------------\n\n");

    return EXIT_SUCCESS;
}

本地输出中,long的取值范围和int一致,sizeof结果为4;但在在线编译器运行时,long的取值范围是64位整数区间,sizeof结果为8。


核心原因:平台数据模型的差异

C语言标准仅规定long的长度不小于int,并未强制其为64位,具体长度由平台采用的数据模型决定:

1. Windows 64位采用LLP64模型

在LLP64模型下:

  • int和long均为4字节(32位),因此LONG_MIN、LONG_MAX的取值范围和int完全一致
  • 仅long long为8字节(64位)
    这是Windows 64位平台的规范行为,并非代码错误。

2. 多数在线编译器采用LP64模型

基于Linux、macOS等系统的在线编译器普遍使用LP64模型:

  • int为4字节,long和long long均为8字节(64位)
  • 因此long的取值范围对应64位整数极值,sizeof结果为8,符合该类平台的规范。

跨平台开发建议

如果需要在所有平台上使用明确的64位整数,推荐:

  • 使用long long类型
  • 或引用<stdint.h>头文件,使用int64_t(固定64位有符号整数)、intptr_t(适配指针宽度的整数)等类型,避免依赖平台特定的类型长度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:45:01