在 C++ 中使用 128 位整数
在本文中,我们将讨论 C++ 中的 128 位整数。 我们还将了解为什么需要它以及 C++ 中可能的替代方案。
在 C++ 中使用 128 位整数
我们有多种选择来处理 C++ 中的整数。 从int数据类型开始,有64位的long、long int、long long int,我们可以存储的最大正数是9223372036854775807(十六进制7FFFFFFFFFFFFFFF)。
考虑十六进制数 7; 接下来,我们将有 8,即二进制 1000,这意味着符号位打开。 最后,我们有从 -1 到 -9223372036854775808 的负整数。9223372036854775807 是一个足够大的数字,足以处理许多存储加算术运算的要求。
128 位整数及其在 C++ 中的替代方案的重要性
现在,如果您需要更大的整数,问题是,我们要对这些整数执行算术运算吗? 如果答案是肯定的,您可能需要比 128 位更多的存储空间。
两个大整数相加或相乘的结果可能需要更多位。 因此,在这种情况下,实现大整数可能会对您有所帮助。
最后,如果您只需要一个 128 位整数用于存储,一种解决方案是创建两个 64 位整数的结构,或者您可以采用 8 个元素的 int 数组或 16 个元素的 char 数组。
然而,GCC 确实为 128 位整数提供了一种特定的数据类型,即 int128_t; 在支持的编译器上,您可以检查大小:
int128_t var;
cout << sizeof(var) << '\n';
输出将为 16,这意味着 16x8=128
位。
然而,它支持特定的处理器,能够容纳 128 位; 否则,当您尝试存储大整数时,编译器会生成以下警告之一:
warning: overflow in implicit constant conversion
warning: integer constant is too large for its type
讨论的结论是精确决定在最坏情况下需要多少位。
此外,您只想存储数据,还是想执行算术运算? 那么,如果您想执行算术运算,大整数实现就是您的解决方案。
对于大整数实现,您甚至不必担心 500 或 5000 位。
如果您只想进行存储,则可以使用其他解决方案。 使用两个 64 位数据成员的结构,或使用 int
数据类型或 char
数据类型的数组。
相关文章
C++ 中的默认构造函数和 default 关键字
发布时间:2023/09/02 浏览次数:127 分类:C++
-
本文讨论 C++ 中的默认构造函数以及新引入的关键字 default。首先,让我们了解一下C++中的默认构造函数。 默认构造函数是一种特殊的构造函数,它没有参数,用于为类的数据成员设置默认值。
C++ 中的空构造函数
发布时间:2023/09/02 浏览次数:165 分类:C++
-
C++ 中的空构造函数是一种不执行任何操作的特殊类型构造函数。 编译器知道没有代码可以执行,因此不会为构造函数生成任何可执行代码。
C++ 中的结构体构造函数
发布时间:2023/09/02 浏览次数:74 分类:C++
-
这篇文章将讨论 struct 的使用以及使用 C++ 添加构造函数。C++结构体简介 struct 代表结构,是组合了一些基本类型变量的用户定义数据类型。 这些变量混合起来形成一个新的单元。
单链表的 C++ 复制构造函数
发布时间:2023/08/31 浏览次数:59 分类:C++
-
本文将首先讨论链表数据结构的概念以及使用它的合适场景。 然后,我们将讨论使用 C++ 的单链表和单链表的复制构造函数的紧凑实现。
C++ 中负数的模数
发布时间:2023/08/31 浏览次数:121 分类:C++
-
在本文中,我们将发现余数和模数之间的差异。 我们将了解 % 运算符的基础知识。稍后,我们将了解 % 运算符在 Python 和 C++ 中的行为方式。 最后,我们将通过讨论在 C++ 中实现模数功能的几种
C++ 中最快的排序算法
发布时间:2023/08/31 浏览次数:150 分类:C++
-
本文将解释哪种排序算法在什么条件下表现最好。 条件包括数据结构的类型、排序数据的大小、数据排列和数据元素的范围。
将 DLL 反编译为 C++ 源代码
发布时间:2023/08/31 浏览次数:198 分类:C++
-
本文讨论我们可以用来将 DLL 反编译为 C++ 源代码的工具。反编译器简介 反编译器是一种逆向工程工具。