💡
原文中文,约1800字,阅读约需5分钟。
📝
内容提要
本文讨论了在Windows平台上开发C++程序时,long数据类型的字长和int一样是4,而不是Linux上的8。建议使用定长整数类型来保证64位整数,常用类型包括std::int8/std::uint8、std::int16/std::uint16、std::int32/std::uint32和std::int64/std::uint64。size_t也是一个常用类型,但在某些场景下无法使用。可以手动引入相应的开源代码以满足更大范围的整数需求。
🎯
关键要点
- 在Windows平台上,long数据类型的字长和int一样是4,而不是Linux上的8。
- C++标准规定了不同数据类型的字长,char至少8位,short至少16位,int至少16位,long至少32位,long long至少64位。
- MSVC下long和int大小一样,主要是因为Windows使用LLP64模型,而大多数Linux/Unix和MacOS使用LP64模型。
- 在科学计算领域,ILP64模型常见,尤其是在处理大量数据时,int32容易溢出,因此需要使用64位整数。
- C++11引入了定长整数类型,建议使用std::int8/std::uint8、std::int16/std::uint16、std::int32/std::uint32和std::int64/std::uint64来保证64位整数。
- size_t通常是unsigned long long int的别名,绝大多数情况下能保证64位,但在某些场景下无法使用。
- 对于更大范围的整数需求,如int128,C/C++标准未提及,但一些编译器已支持,若不支持需手动引入开源代码。
➡️