当我编码时,我遇到了一个问题:我需要输出 2^64 的数字(还有 3^64 等)。我尝试过 unsigned long long int,但仍然不够(它包含 2^64-1)。如果有人知道我如何输出从 64 位到 128 位的数字,请告诉我(顺便说一句,我正在尝试在 C 上执行此任务)。
问问题
54 次
1 回答
1
首先,编译这个程序:
#include <stdint.h>
int main(void)
{
return (int128_t) 0;
}
如果编译器打印有关标识符的错误消息int128_t
,那么无论类型名称是什么,您的编译器都可能不支持大于 64 位的整数。
在这种情况下,您至少有三个选择:
- 如果您不需要精确的结果,您可以使用
double
或long double
浮点数,如printf("%g\n", pow(2, 64));
. - 您可以编写自己的代码来实现较小类型的 128 位算术。简而言之,简单的程序,您可以使用小学教授的相同技术逐位乘法和加法,只需使用
uint32_t
“数字”之类的类型而不是单个十进制数字。或者,如果您愿意,也可以使用单个十进制数字来实现它们。(例如,uint32_t
可以将两个数字转换uint64_t
并相乘以形成 64 位乘积,然后将其拆分为一位uint32_t
保留在当前位置,一位保留uint32_t
到下一个位置。) - 使用任意精度库,例如GNU 多精度算术库。这将需要下载和配置其他软件。
于 2021-09-15T18:06:53.360 回答