【问题标题】:How to output number in the range 64 bits to 128 bits ( like 2^64, 3^64, 4^64 etc)?如何输出 64 位到 128 位范围内的数字(如 2^64、3^64、4^64 等)?
【发布时间】:2021-11-10 19:36:29
【问题描述】:

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

【问题讨论】:

  • 这可能是 XY 问题。您有问题陈述和建议的解决方案吗?
  • c++ 有 __int128 但对于 c 你可能需要编写自己的自定义逻辑
  • @RishabhDeepSingh __int128 是一个 gcc 扩展,在 c 或 c++ 中工作
  • 4^64 超出 128 位整数范围。 2^64, 4^64 可用作 double。真正的问题是什么?
  • @AlanBirtles 不知道它也适用于 c。但它没有输出运算符,因此您可以自己定义它。类似stackoverflow.com/questions/25114597/how-to-print-int128-in-g

标签: c 64-bit 128-bit


【解决方案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 Multiple Precision Arithmetic Library。这将需要下载和配置其他软件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 2019-07-09
    • 2015-05-02
    • 2023-03-03
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多