【问题标题】:how to print boost multiprecision 128 bit unsigned integer如何打印提升多精度 128 位无符号整数
【发布时间】:2020-02-17 13:31:33
【问题描述】:

我想打印从十六进制值转换而来的整数值,但我只能打印十六进制值。

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;

    cpp_int          dsa("0xFFFFFFFFFFFFFFFF");
    cpp_int          daa("9223372036854775807");
    daa = ((daa * 64) + daa);
    cout << std::hex<<dsa <<std::showbase<< endl;
    cout <<dsa << endl;
    cout <<daa << endl;
    cout <<(int)daa << endl;
    cout <<(int128_t)daa << endl;

输出

ffffffffffffffff
0xffffffffffffffff
0x207fffffffffffffbf
0x7fffffff
0x207fffffffffffffbf

如何打印 128 位整数类型的最大值?

【问题讨论】:

  • 感谢std::dec@rafix07

标签: c++ boost boost-multiprecision


【解决方案1】:

您应该使用std::numeric_limits 来获取最大值,因为这是它的目的。 您的格式问题与您的实际问题无关。

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <limits>

int main()
{
    auto max = std::numeric_limits<boost::multiprecision::int128_t>::max();
    std::cout << max << std::endl;
}

【讨论】:

  • 它说expected an identifier 关于max() @lars
  • 那你做错了什么或者使用了旧的编译器。在这里您可以检查该示例是否编译。 godbolt.org/z/vHxGfZ
  • 我用的是微软编译器,可能是个问题@lars
  • 您需要 std::dec 只是因为您以前使用过 std::hex 。 std::cout 是有状态的。所以你的问题实际上不是你要求的;)“我怎样才能打印 128 位整数类型的最大值?”但是你真的应该使用 numeric_limits 来获取最大值,因为这是它的目的。
  • "但是你真的应该使用 numeric_limits 来获得最大值,因为这就是它的目的。"应该是答案的一部分。因此,在我看来,它不能自我解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2021-05-12
  • 2020-07-06
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多