64位操作

时间:2011-06-03 12:18:39

标签: c

我正在为处理long long int的素数测试函数编写代码。我必须使用特殊运算符来处理如此大的数字吗?有没有关于C中大数字操作的文档?我正在使用gnu标准库.Thanks。

6 个答案:

答案 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/