讲师中心 微信公众号
AI工具推荐 视频效率加速

C++ int和long有什么区别 C++ 整数类型对比【干货】

浅明小哥_5821

浅明小哥_5821

发布时间:2026-03-09 12:50:03

|

1062人浏览过

|

来源于php中文网

原创

int 和 long 的大小因平台而异:Windows x64 下均为32位,Linux x64 下 int 为32位、long 为64位;应优先使用 int32_t/int64_t 等固定宽度类型,避免跨平台兼容性问题。

c++ int和long有什么区别 c++ 整数类型对比【干货】

int 和 long 在不同平台上的实际大小不一致

它们没有固定字节数,C++ 标准只规定了最小范围:int 至少 16 位,long 至少 32 位。这意味着在 Windows x64(MSVC)下 int 和 long 都是 32 位;但在 Linux x64(GCC)下 int 是 32 位、long 是 64 位——同一份代码编译结果可能不同。

常见错误现象:sizeof(long) == sizeof(int) 在 Windows 上为真,在 Linux 上为假;跨平台传递二进制结构体时字段错位。

  • 别依赖 sizeof(long) 等于 4 或 8,用 std::numeric_limits<long>::digits</long> 查实际位数
  • 需要确定宽度时,优先用 int32_t、int64_t(需 #include <cstdint></cstdint>)
  • 接口参数若涉及大小敏感场景(如系统调用、网络协议),明确写 int32_t 而非 long

long long 是唯一被标准强制要求 ≥64 位的整型

long long 自 C++11 起被要求至少 64 位,且几乎所有现代编译器都实现为 exactly 64 位。它比 long 更可预测,尤其在需要大整数但又不想引入 int64_t 的轻量场景中。

使用场景:时间戳计算(如 nanoseconds since epoch)、哈希值中间运算、避免 32 位乘法溢出。

立即学习“C++免费学习笔记(深入)”;

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • long long 字面量必须带 LL 后缀,比如 1000000000000LL,否则可能被当 int 截断
  • 和 long 混用时注意隐式转换:long x = 1L; long long y = x * 1000000LL; 中乘法在 long long 上进行,但若写成 x * 1000000,则先按 long 算再提升,可能溢出
  • Windows API 中几乎不用 long long,而大量用 LONGLONG(等价于 long long),但头文件里定义方式不同,直接混用可能触发类型不匹配警告

printf/scanf 中的格式符必须和实际类型严格匹配

用错格式符是运行时未定义行为,轻则输出乱码,重则崩溃。比如在 64 位 Linux 下用 %d 打印 long(实际 64 位),会只读前 4 字节,结果不可控。

常见错误现象:printf("%d", my_long_var) 在 GCC 编译时可能报警告,但 MSVC 默认不报;scanf("%ld", &my_int_var) 会导致栈写越界。

  • int → %d,long → %ld,long long → %lld
  • Windows 下 long long 的 scanf 格式符有时要写 %I64d(尤其旧 MSVC),但 C++11 后推荐统一用 %lld 并确保编译器支持
  • 更安全的做法是用 std::cout 或 fmt::format,避开 C 风格格式符的类型陷阱

性能差异几乎可以忽略,但 ABI 兼容性影响真实项目

在现代 CPU 上,32 位和 64 位整数运算指令周期数基本一致,缓存占用差异也微乎其微。真正卡住人的,是 ABI(应用二进制接口)层面的约束:DLL 导出函数签名、结构体内存布局、跨语言绑定(如 Python ctypes)都依赖类型的精确大小和对齐。

例如:一个导出函数返回 long,在 Windows 上是 32 位,在 Linux 上是 64 位,Python 用 ctypes.c_long 加载时会因长度不匹配读错数据。

  • 对外暴露的接口类型,一律用固定宽度类型(int32_t / uint64_t)或明确注释平台假设
  • 结构体中混用 int 和 long 时,用 static_assert(sizeof(MyStruct) == N, "...") 锁死大小
  • 不要为了“省点内存”在 64 位程序里坚持用 int 存指针差值——该用 ptrdiff_t 就用,它才是语义正确的类型

最麻烦的不是大小本身,而是有人在头文件里写了 typedef long time_t,然后你改了编译器或平台,整个时间处理逻辑就悄悄错位了。

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1769

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1211

2024.06.27

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

828

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1029

2023.11.28

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

4894

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

5051

2025.07.04

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

313

2023.09.26

c语言typedef的用法
c语言typedef的用法

c语言typedef的用法有定义基本类型别名、定义结构体别名、定义指针类型别名、定义枚举类型别名、定义数组类型别名等。本专题为大家提供typedef相关的文章、下载、课程内容,供大家免费下载体验。

2952

2023.09.26

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn