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

为什么C语言中sizeof(long long)返回值为8,而非预期的16字节?

C语言long与long long宽度问题解答

C语言标准并没有为long、long long这类基础整数类型指定固定的字节长度,只规定了最低取值范围要求,同时要求类型的宽度满足 char ≤ short ≤ int ≤ long ≤ long long:

  • long 最低需要支持-2^31 ~ 2^31-1的取值范围,对应最小宽度为4字节
  • long long 最低需要支持-2^63 ~ 2^63-1的取值范围,对应最小宽度为8字节
    只要符合这个要求,编译器可以根据目标平台自由决定具体的类型宽度。

你遇到的现象原因

你运行的测试代码输出两个8的结果,说明你当前使用的是64位Linux、macOS这类采用LP64数据模型的操作系统,这类系统下的C编译器实现中:

  • long 宽度为8字节,满足标准的最低要求
  • long long 宽度为8字节,同样满足标准的最低要求(标准仅要求long long宽度≥long的宽度,没有要求必须更大)

如果是在64位Windows系统(采用LLP64数据模型)下,你会得到不一样的结果:long 宽度为4字节,long long 宽度为8字节。

扩展说明

如果需要16字节的超大整数类型,目前主流C编译器普遍支持非标准扩展类型__int128/unsigned __int128,可满足超大整数计算需求。如果需要跨平台保证固定宽度的整数,建议直接使用stdint.h头文件中定义的定宽类型,比如int32_t、uint64_t等,避免不同平台的类型宽度差异导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 12:57:00