在C++中是否存在大于long long int的类型?

Mic*_*ael 43 c++ types

在C++中是否存在大于long long int的类型?

我的编译器是g ++.

Kit*_*YMG 9

__int128
__uint128

​​​​​ ​​​​​​​​​​​​​​​

  • 在Microsoft Visual上未启用__int128 (4认同)

jho*_*jho 9

不,但你可以使用像GMP这样的库来处理更大的数字.


J T*_*J T 8

根据您的需要,您可以创建自己的结构来处理数据类型:

#include <cstdint>

struct uint256_t
{
    std::uint64_t bits[4];
};

uint256_t x;
Run Code Online (Sandbox Code Playgroud)


Cir*_*四事件 6

标准

C和C++标准明确允许扩展整数类型.

C++ 11

C++ 11 N3337草案 3.9.1"基本类型"第3段说:

有五种标准的有符号整数类型:"signed char","short int","int","long int"和"long long int".在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间.也可能存在实现定义的扩展有符号整数类型.标准和扩展有符号整数类型统称为有符号整数类型.简单的int具有执行环境的体系结构所建议的自然大小,提供其他有符号整数类型以满足特殊需要.

你还应该考虑intmax_t,18.4.1"标题概要"第2段说:

标题定义了所有函数,类型和宏,与C标准中的7.18相同.

C99

C99 N1256草案明确允许它们在6.2.5"类型"第4段:

有五种标准的有符号整数类型,指定为signed char,short int,int,long int和long long int.(这些和其他类型可以用几种其他方式指定,如6.7.2中所述.)也可能存在实现定义的扩展有符号整数类型.28)标准和扩展有符号整数类型统称为有符号整数类型.29 )

和7.18.1.5"最大宽度整数类型"第1段说:

以下类型指定一个有符号整数类型,它能够表示任何有符号整数类型的任何值:

还会将intmax_t


Spi*_*xff 5

总结...

如果您需要存储不适合 'long long' 的精确整数值,gcc 提供__int128类型。这是一个 gcc 扩展,不是标准 C++ 的一部分(在撰写本文时)。

如果您需要处理更大的精确整数值,您可能需要一个任意精度的算术包,例如GMP。如果您的需求非常有限,您可以推出自己的扩展精度代码,但与使用现有库相比,这会很快变得更加复杂(并且效率和可靠性较低)。

如果您需要存储更大的数字但不需要精确存储更大的值,您可以使用floatdouble:它们可以表示更大数量级但精度较低的数字。

当然,如果您只想占用更多内存,请声明一个数组;-)