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

时间:2011-03-21 18:22:35

标签: c++ types

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

我的编译器是g ++。

9 个答案:

答案 0 :(得分:17)

答案 1 :(得分:9)

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

答案 2 :(得分:8)

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

#include <cstdint>

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

uint256_t x;

答案 3 :(得分:7)

__int128
__uint128

答案 4 :(得分:5)

<强>标准

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

<强> C ++ 11

C++11 N3337 draft 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 draft明确允许他们在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

答案 5 :(得分:2)

...总结

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

如果您需要使用更大的精确整数值,则可能需要arbitrary-precision arithmetic package,例如GMP。如果您的需求非常有限,您可以使用自己的扩展精度代码,但与使用现有库相比,这可能会变得更加复杂(效率更低,更可靠)。

如果您需要存储较大的数字但不需要准确存储较大的值,则可以使用 float double :这些可以表示更大的数字幅度,但precision更少。

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

答案 6 :(得分:0)

你可以查看BigInt课程...... http://sourceforge.net/projects/cpp-bigint/

(还有很多其他的BigInts ......)

答案 7 :(得分:0)

如果您知道自己的号码总是积极的,可以通过将其标记为int来扩展unsigned的范围

int myNum; // Range is from –2,147,483,648 to 2,147,483,647

unsigned int myNum; // Range is from 0 to 4,294,967,295

答案 8 :(得分:0)

您可以使用

#include <boost/multiprecision/cpp_int.hpp>  
using namespace boost::multiprecision;

使用大于long long int的数据类型并且数据类型为cpp_int Ref