如何在c中表示大于long的数字

时间:2013-09-07 15:51:39

标签: c

我想要一个变量来表示C中的数字600851475143,但这个值大于long的最大值2147483647。我应该使用哪种数据类型?

3 个答案:

答案 0 :(得分:3)

使用unsigned long。这将只允许数字> = 0,但它会扩展您的范围。我会确保你的long类型是64位,因为这也会扩展你的值范围。

您也可以使用gmplib,它是在LGPL下发布的:http://gmplib.org/

答案 1 :(得分:3)

使用整数类型long long 它至少适用于-9223372036854775807< = x< = +9223372036854775807。

#include <stdio.h>
int main(int argc, char *argv[]) {
  long long big = 600851475143;
  printf("%lld\n", big);  // prints 600851475143
  return 0;
}

或者,可以使用int64_tuint64_t - 64位类型。


上述范围是C11 5.2.4.2.1中指定的最小范围。

答案 2 :(得分:2)

除了使用@ H2CO3建议的任意精度整数数学库之外,如果您计划使用如此大的数字而不必担心溢出,这可能是您最好的选择,您应该检查编译器/平台文档以获得最大可表示号。

如果您不需要签名算术,则可以使用unsigned longunsigned long long,否则使用signed long long。请记住,标准并未严格规定其尺寸,仅规定了最低标准(来自C99标准草案 - 附件E):

#define LONG_MAX +2147483647
#define LONG_MIN -2147483647
#define LLONG_MAX +9223372036854775807
#define LLONG_MIN -9223372036854775807
// [...]
#define ULONG_MAX 4294967295
#define ULLONG_MAX 18446744073709551615