在c ++中存储和打印10+数字整数

时间:2010-02-09 18:40:26

标签: c++

我正在使用cout将数字打印到控制台。我还将高达13亿的数值存储为数字并对其进行计算。我应该使用什么数据类型?

当我执行以下操作时:

int a = 6800000000;
cout << a;

打印-1789934592。

感谢。

8 个答案:

答案 0 :(得分:14)

long long最多可以容纳9223372036854775807.如果您需要更大的话,请使用gmp之类的内容。

答案 1 :(得分:6)

使用int64_t保证您不会溢出。它可以从stdint.h获得。

答案 2 :(得分:2)

请注意,{C}和C ++ 0x中都包含int64_tlong long,但当前版本的C ++中不是。因此,使用其中任何一个都会使您的代码存在不可移植的风险。然而,实际上,这种风险可能已经很低了 - 到了/如果你移植代码,可能会有更大的问题。

但是,如果您确实想要确保这种可能性,可以考虑使用双精度浮点。与流行的看法相反,浮点类型可以精确地表示整数到一定限度 - 该限制被设置(实质上)由F.P.中的尾数的大小。类型。 double的典型实现具有53位尾数,因此您可以使用绝对精度表示53位整数。这支持的数字最多可达9,007,199,254,740,992(其中<13>

答案 3 :(得分:1)

您的数据类型(int)太小,无法容纳如此大的数字。您应该使用更大的数据类型或其他答案中给出的固定大小数据类型之一(尽管如果您不使用负数,则应该使用uint64_t)。

答案 4 :(得分:1)

了解不同尺寸类型的范围限制是个好主意。

32位类型(在大多数32位平台上,int和long都是32位)具有以下范围:

signed: -2,147,483,648 to 2,147,483,647
unsigned: 0 to 4,294,967,295

虽然64位类型(通常很长的是64位,在大多数Unix 64位平台上,long也是64位)具有以下范围:

signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned: 0 to 18,446,744,073,709,551,615

答案 5 :(得分:0)

在声明声明中使用double

答案 6 :(得分:-1)

你可以使用long int:

long int a

或者如果它总是积极的,那么unsigned long int:

unsigned long int a

请参阅:http://forums.guru3d.com/showthread.php?t=131678

答案 7 :(得分:-1)

unsigned long long

可以使用