如何在c语言中表示大于long的数
我需要一个变量来表示C中的数字如何在c语言中表示大于long的数,c,C,我需要一个变量来表示C中的数字600851475143,但该值大于long的最大值,即2147483647。我应该使用什么数据类型?使用无符号long。这将只允许数字>=0,但它将扩展您的范围。我会确保您的长类型为64位,因为这也会扩展您的值范围 您还可以使用gmplib,它是在LGPL下发布的:除了使用任意精度的整数数学库之外,正如@H2CO3所建议的,如果您计划使用如此大的数字而不担心溢出,这可能是您最好的选择,您应该检查编译器/平台文档,以获得可表示的最大数量 如果不需要有符号算术,可以使
600851475143
,但该值大于long的最大值,即2147483647
。我应该使用什么数据类型?使用无符号long。这将只允许数字>=0,但它将扩展您的范围。我会确保您的长类型为64位,因为这也会扩展您的值范围
您还可以使用gmplib,它是在LGPL下发布的:除了使用任意精度的整数数学库之外,正如@H2CO3所建议的,如果您计划使用如此大的数字而不担心溢出,这可能是您最好的选择,您应该检查编译器/平台文档,以获得可表示的最大数量 如果不需要有符号算术,可以使用
无符号长
或无符号长
,否则有符号长
。请记住,本标准并未明确规定其尺寸,仅规定了最小尺寸(来自C99标准草案-附录E):
使用整数类型
long
它至少适用于-9223372036854775807
无符号长
<代码>长-长<代码>无符号长-长?使用bigint库?…字符串<代码>双倍<代码>长双精度?一切取决于你的需要!搜索C数据类型及其大小。有些编译器甚至支持128位整数。如果你想得到更好的建议,你应该告诉我们如何处理这个数字。关于您试图解决的问题,您给我们的信息太少。可能是输入错误,但为了避免在帖子中留下错误信息:“这将只允许数字>=0”@SevenBits以确保整数类型为64位,简单使用int64\t
或uint64\t
@LorenzoDonati谢谢,是的,这是一个输入错误。我现在就纠正它。但是它自己定义的那些类型的大小又是实现定义的,不是吗?或者为什么在我知道的所有平台上,long的大小在32位和64位的arch上都有所不同?@Zaibis Lorenzo Donati发布了最小值。这些值由实现定义,但至少涵盖上述范围,因此长
可以是4个或更多8位字节。
#define LONG_MAX +2147483647
#define LONG_MIN -2147483647
#define LLONG_MAX +9223372036854775807
#define LLONG_MIN -9223372036854775807
// [...]
#define ULONG_MAX 4294967295
#define ULLONG_MAX 18446744073709551615
#include <stdio.h>
int main(int argc, char *argv[]) {
long long big = 600851475143;
printf("%lld\n", big); // prints 600851475143
return 0;
}