为什么选用int64_t而不是longlong
int64_t 是 C++ 中的一种整型数据类型,占用 8 个字节(64 位),可以存储的整数范围是从 -9223372036854775808 到 9223372036854775807。它是一种固定长度的数据类型,可以保证在不同的平台上都有相同的位数和取值范围,适用于需要存储大整数的场合。在某些系统中,也可以用 long long int 代替 int64_t。
使用 long long 存储大整数在绝大多数情况下可能是没有问题的,但是在不同的编译器或平台上的实现有可能是不同的,由于 long long 的长度没有明确定义,可能只占有 4 个字节(32 位),而在一些应用场景需要确保整数类型占用的字节数和范围。这就是为什么对于大整数我们会选择使用 int64_t 类型的原因,它是一个标准的、固定长度的整数类型。
那有什么场景是只能用longlong而不能用int64_t的呢
在某些不使用补码表示的嵌入式系统中,C++编译器可能不存在 int64_t 类型。此外,如果在其他程序库、运行环境等上下文中定义了某个名为 int64_t 的实体,那么使用 long long 代替 int64_t 可能更明确和安全。
补充问题:int64_t和longlong和__int64
-
int64_t是C99标准引入的一种数据类型,可以实现跨平台的可移植性。在32位和64位系统中都使用同一种大小和字节序。该类型定义在<stdint.h>头文件中。
-
long long是C99和C++11中的一种基本类型,用于表示64位整数。需要注意的是,该类型并不是在所有平台上都实现为64位的整型,具体实现可以参考编译器文档。
-
__int64是Microsoft Visual C++编译器所支持的一种扩展整型类型,用于定义一个有符号64位整型变量。它仅在Microsoft Visual C++编译器中有效,可能不具有跨平台的可移植性。
因此,如果要实现跨平台的可移植性,应该使用int64_t类型。如果使用Microsoft Visual C++编译器,则可以使用__int64类型。而long long可以在大多数情况下使用,但在某些特定平台上可能会与定义不符。