-1

当我编码时,我遇到了一个问题:我需要输出 2^64 的数字(还有 3^64 等)。我尝试过 unsigned long long int,但仍然不够(它包含 2^64-1)。如果有人知道我如何输出从 64 位到 128 位的数字,请告诉我(顺便说一句,我正在尝试在 C 上执行此任务)。

4

1 回答 1

1

首先,编译这个程序:

#include <stdint.h>
int main(void)
{
    return (int128_t) 0;
}

如果编译器打印有关标识符的错误消息int128_t,那么无论类型名称是什么,您的编译器都可能不支持大于 64 位的整数。

在这种情况下,您至少有三个选择:

  • 如果您不需要精确的结果,您可以使用doublelong 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 回答