【为什么】选用int64_t而不是longlong

简介: 【为什么】选用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可以在大多数情况下使用,但在某些特定平台上可能会与定义不符。

相关文章
|
3月前
|
存储 Java API
使用Integer而不是int的场景和优势解析
使用Integer而不是int的场景和优势解析
41 0
|
3月前
|
存储 自然语言处理 安全
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
|
9月前
|
SQL 关系型数据库
使用INT4/INT类型替换INT8/BIGINT类型能够节省多少磁盘空间?
使用INT4/INT类型替换INT8/BIGINT类型能够节省多少磁盘空间?
74 0
|
存储 关系型数据库 MySQL
Mysql数据库int(11)和int(10)有啥区别?
Mysql数据库int(11)和int(10)有啥区别?
Mysql数据库int(11)和int(10)有啥区别?
|
存储 编译器 Windows
(int char等)数据类型的存储方式及计算取值(最全、最详细~保姆式讲解)(Windows)
M表示 大于等于1,小于2的数。(解释一下,我们在10进制里面,使用科学计数法是用一个大于等于1、小于10的数乘以10^n来表示的。类比推理一下,在2进制里面就是一个大于1、小于2的数乘以2的多少次)。
151 0
(int char等)数据类型的存储方式及计算取值(最全、最详细~保姆式讲解)(Windows)
|
存储 SQL 关系型数据库
int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了
int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了
124 0
int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了
|
C语言 C++
C++中int int& int * int**的区别、联系和用途
C++中int int& int * int**的区别、联系和用途
353 0
C++中int int& int * int**的区别、联系和用途
|
C++ 容器
vector以及使用举例--C++基础
vector以及使用举例--C++基础
105 0
vector以及使用举例--C++基础
|
C语言
char型int型float型double型数组在内存中所占的字节数(16位、32位、64位PC机)
char型int型float型double型数组在内存中所占的字节数(16位、32位、64位PC机)
456 0
char型int型float型double型数组在内存中所占的字节数(16位、32位、64位PC机)
|
存储 关系型数据库 MySQL
Mysql中Unsigned和Zerofill数据型的使用(细节也很重要啊)
一、今天开同事在使用Mysql的时候,错误使用了Unsigned和Zerofill了,大概是不是蛮懂这两个使用场景吧。很多东西,细节都是很重要的,不能随便用的。
1559 0