-2

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

4

3 回答 3

4

使用整数类型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 中规定的最小范围。

于 2013-09-07T16:43:05.163 回答
3

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

您还可以使用在 LGPL 下发布的 gmplib:http: //gmplib.org/

于 2013-09-07T15:55:12.600 回答
2

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

如果您不需要有符号算术,您可以使用unsigned longor unsigned 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
于 2013-09-07T16:04:48.487 回答