我想要一个变量来表示600851475143
C 中的数字,但这个值大于 long 的最大值,即2147483647
。我应该使用什么数据类型?
问问题
17209 次
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_t
或uint64_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 long
or 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 回答