Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 64位操作_C - Fatal编程技术网

C 64位操作

C 64位操作,c,C,我正在为处理长整型数的素性测试函数编写代码。我必须为如此大的数使用特殊运算符吗?有关于C语言中大数操作的文档吗?我正在使用gnu标准库。谢谢。如果你只是处理长整型数,你不需要任何特殊的长整型数因为编译器支持它。在将两个long-long-ints相加和相乘时,注意溢出 对于处理非常大的数字(范围远远大于long-long-int),请查看查看GMP库:不,您不需要做任何特殊的操作。处理long-long int的方法与处理int的方法相同。只需小心溢出,就像所有本机整数类型一样。如果编译器支持长

我正在为处理长整型数的素性测试函数编写代码。我必须为如此大的数使用特殊运算符吗?有关于C语言中大数操作的文档吗?我正在使用gnu标准库。谢谢。

如果你只是处理
长整型数
,你不需要任何特殊的长整型数因为编译器支持它。在将两个
long-long-int
s相加和相乘时,注意溢出


对于处理非常大的数字(范围远远大于
long-long-int
),请查看查看GMP库:

不,您不需要做任何特殊的操作。处理
long-long int
的方法与处理
int
的方法相同。只需小心溢出,就像所有本机整数类型一样。

如果编译器支持长整型整数,则无需执行任何“特殊”操作。如果处理器不支持64位类型(可能是32位处理器),编译器将使用汇编代码序列模拟该功能,将64位操作分解为32位操作。

如果编译器支持
long-long-int
,它将使用标准运算符


顺便说一下,
long-long-int
在64位unices上是128位(其中
long
单独是64位)。如果所有平台上都需要64位,请使用
中的
int64\t
。这不适用于64位windows,其中
long
仍然是32位,
long
是64位。

long-long在C99中是新出现的,尽管此前许多编译器都支持将其作为扩展

对于gcc,long long是64位的,您可以像使用任何其他整数类型一样使用它,不需要任何特殊要求

不过,有几件事需要注意,源代码中的整数常量需要使用LL后缀(如果是无符号的,则使用LLU),例如,您必须这样做

long long foo = 123412341234123LL;
而不是

long long foo = 123412341234123;
类似地,对于使用printf系列输出long-long,必须使用转换说明符“%lld”而不是“%d”或“%ld”(或“%llu”(如果未签名),例如


gcc中有一些关于long long的文档

long long
在64位Linux上是64位的,至少在普通ARCH上是这样。我不确定其他Unice或像Alpha、Sparc等丑陋的遗留东西……我不是反对者,但可能是GMP通常不受欢迎,因为它是坏库代码的完美例子。它最严重的缺点之一是不支持另外,
abort()
如果调用者内存不足,则调用它,而不是报告错误并为调用者提供恢复方法。这使得它无法作为任何高可靠性程序的一部分使用,因此也无法在任何可能作为高可靠性程序一部分使用的库中使用。
printf("foo = %lld",foo);