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

相关文章
|
6月前
|
存储
sign与unsigned的原理、数据存储与硬件的关系
【9月更文挑战第15天】在编程语言中,`signed`(有符号)和`unsigned`(无符号)类型具有不同的原理和数据存储方式。有符号类型使用补码表示法,包含符号位,能表示正数、负数和零;无符号类型仅表示非负整数,没有符号位。两者在内存占用上相同,但在存储方式、处理器指令集支持、寄存器处理及溢出处理等方面存在差异。选择合适类型并处理溢出等问题至关重要。
164 11
|
8月前
|
缓存 运维 Serverless
函数计算产品使用问题之在SD上安装了'inpaint anything'这个插件,但是不显示,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
146 1
|
7月前
|
编译器 C语言
【C深剖】三组典型C题+float在if中的比较
【C深剖】三组典型C题+float在if中的比较
|
8月前
|
存储 缓存 运维
函数计算产品使用问题之SD上安装了inpaint anything插件,但是不显示,该如何解决
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
631 0
|
存储 C语言
C 语言实例 - 计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
119 1
|
8月前
|
存储 编译器 C++
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
118 0
|
9月前
|
存储 缓存 前端开发
技术好文共享:详解Paint的各种set方法
技术好文共享:详解Paint的各种set方法
80 0
|
SQL 关系型数据库
使用INT4/INT类型替换INT8/BIGINT类型能够节省多少磁盘空间?
使用INT4/INT类型替换INT8/BIGINT类型能够节省多少磁盘空间?
120 0
|
10月前
|
存储 Java API
使用Integer而不是int的场景和优势解析
使用Integer而不是int的场景和优势解析
293 0
|
存储 关系型数据库 MySQL
Mysql数据库int(11)和int(10)有啥区别?
Mysql数据库int(11)和int(10)有啥区别?
Mysql数据库int(11)和int(10)有啥区别?