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

相关文章
|
2月前
|
存储
sign与unsigned的原理、数据存储与硬件的关系
【9月更文挑战第15天】在编程语言中,`signed`(有符号)和`unsigned`(无符号)类型具有不同的原理和数据存储方式。有符号类型使用补码表示法,包含符号位,能表示正数、负数和零;无符号类型仅表示非负整数,没有符号位。两者在内存占用上相同,但在存储方式、处理器指令集支持、寄存器处理及溢出处理等方面存在差异。选择合适类型并处理溢出等问题至关重要。
70 11
|
3月前
|
Java
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
这篇文章解释了Java中`int`基本数据类型和其包装类`Integer`之间的区别,并指出在进行`==`运算时,`Integer`会拆箱为`int`类型,然后比较它们的值是否相等。
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
|
4月前
|
缓存 运维 Serverless
函数计算产品使用问题之在SD上安装了'inpaint anything'这个插件,但是不显示,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
存储 缓存 运维
函数计算产品使用问题之SD上安装了inpaint anything插件,但是不显示,该如何解决
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
347 0
|
SQL 关系型数据库
使用INT4/INT类型替换INT8/BIGINT类型能够节省多少磁盘空间?
使用INT4/INT类型替换INT8/BIGINT类型能够节省多少磁盘空间?
107 0
|
6月前
|
存储 自然语言处理 安全
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
158 0
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
|
6月前
|
存储 Java API
使用Integer而不是int的场景和优势解析
使用Integer而不是int的场景和优势解析
214 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的多少次)。
245 0
(int char等)数据类型的存储方式及计算取值(最全、最详细~保姆式讲解)(Windows)
|
C语言 C++
C++中int int& int * int**的区别、联系和用途
C++中int int& int * int**的区别、联系和用途
539 0
C++中int int& int * int**的区别、联系和用途