C ++中是否存在大于long long int的类型?
我的编译器是g ++。
答案 0 :(得分:17)
有一个gcc extension for 128 bit integers。
答案 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