我正在为处理long long int的素数测试函数编写代码。我必须使用特殊运算符来处理如此大的数字吗?有没有关于C中大数字操作的文档?我正在使用gnu标准库.Thanks。
答案 0 :(得分:3)
不,你不需要做任何特别的事情。您处理long long int
的方式与处理int
的方式相同。只要注意溢出,就像每个本机整数类型一样。
答案 1 :(得分:3)
如果您的编译器支持很长的整数,您不必执行任何“特殊”的操作。如果您的处理器不支持64位类型(那么可能是32位处理器),编译器将通过使用汇编代码序列来模拟该功能,这些代码将64位操作分解为32位操作。
答案 2 :(得分:1)
如果编译器支持long long int
,则它适用于标准运算符。
顺便说一句,long long int
在64位unices上是128位(其中long
仅为64位)。如果在所有平台上需要64位,请使用int64_t
中的<stdint.h>
。这不适用于64位窗口,其中long
仍为32位且long long
为64位。
答案 3 :(得分:1)
很长一段时间是C99中的新功能,尽管许多编译器在此之前支持它作为扩展。
对于gcc,long long是64位,你可以像任何其他整数类型一样使用它,不需要特殊的东西。
但有几点需要注意,源代码中的整数常量需要LL后缀(如果它是无符号的,则为LLU,例如,你必须这样做
long long foo = 123412341234123LL;
而不是
long long foo = 123412341234123;
类似地,对于使用printf系列输出long long,您必须使用转换说明符“%lld”而不是“%d”或“%ld”(或“%llu”,如果它是无符号的),例如< / p>
printf("foo = %lld",foo);
在gcc here
中有一些关于long long的文档答案 4 :(得分:0)
如果你只是处理long long int
,只要你的编译器支持它就不需要任何特殊的东西。在添加和乘以两个long long int
s
要处理非常大的数字(范围远大于long long int
的范围),请查看GNU MP BigNum Library
答案 5 :(得分:-1)
查看GMP库:http://gmplib.org/