2011-03-21 657 views
34

在C++中是否有比long long int更大的类型?在C++中是否有比long long int更大的类型?

我的编译器是g ++。

+1

你说的是什么类型的扩展一个int的范围是什么?整型或任何类型?这种情况下“更大”是什么:范围或大小?在任何情况下,输入'int [100]'最有可能比'long long'大很多,但我不认为这是你所问的。澄清你的问题。目前这没什么意义。 – AnT 2011-03-21 18:25:40

+1

你可以尝试很久很久(我只是在开玩笑)我相信在所有体系结构中,long long是最大的64位 – 2011-03-21 18:25:47

+1

@Jesus Ramos:至少有64位(可能更大)。 @AndreyT:不是正式的,但它是一个几乎无处不在的扩展,我们也期望在标准的下一版本中看到(使我们符合C)。 – 2011-03-21 19:04:31

回答

5

__int128
__uint128

+4

__int128未在Microsoft Visual上启用 – 2013-06-28 07:53:02

+0

@BrendanWebster您可以启用它吗? – 2015-08-26 20:03:09

8

没有,但你可以像使用GMP库来处理更大的数字。

14

有一个海湾合作委员会extension for 128 bit integers

+0

注意:'intmax_t'不考虑它http://stackoverflow.com/questions/21265462/why-in-g-stdintmax-t-is-not-a-int128-t – 2015-05-19 16:45:23

9

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

#include <cstdint> 

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

uint256_t x; 
2

总结...

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

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

如果你需要存储较大的数字,但并不需要准确保存较大的值,可以使用浮动:这些能代表更大的幅度的数字,但较少precision

和当然,如果你只是想占用更多的内存,声明数组;-)

+0

有一种可能性是使用'streampos ',取决于所需的大小? – jorgen 2014-02-05 19:10:24

4

标准

扩展整型明确由C和C++标准允许的。

C++ 11

C++11 N3337 draft 3.9.1 “基本类型” 第3段说:

有五种标准符号整型:“符号字符”,“短整型”, “int”,“long int”和“long long int”。在这个列表中,每种类型至少提供与列表中前面那些相同的存储空间。也可能有实现定义的扩展有符号整数类型。标准和扩展的有符号整数类型统称为有符号整数类型。 Plain int具有执行环境体系结构所建议的自然大小,其他带符号整数类型则用于满足特殊需求。

你也应该考虑intmax_t,其中18.4.1“头大纲”第2款说:

头定义的所有功能,类型和宏一样在C标准7.18。

C99

C99 N1256 draft明确允许他们在6.2.5 “类型” 第4段:

有五种标准符号整数类型,指定为符号的字符,短整型,诠释,long int和long long int。 (这些以及其他类型可能是 ,如6.7.2所述)。也可能有实现定义的扩展有符号整数类型.28)标准和扩展有符号整数类型统称为有符号整数类型。 29)

和7.18.1.5“最大宽度的整数类型”第1段表示:

下列类型指定能够表示任何符号整数类型的任何值的带符号的整数类型:

intmax_t

0

如果你知道你的号码始终将是积极的,你可以通过标记它作为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