【问题标题】:How to print numbers bigger than 2^32 in 32-bit C++?如何在 32 位 C++ 中打印大于 2^32 的数字?
【发布时间】:2014-12-14 08:02:39
【问题描述】:

我正在编写一个生成大素数的程序。大于 2^32。如何在 32 位 C++ 中生成如此大的数字?我在 32 位处理器上使用 Windows 7。我知道购买一台新的 64 位计算机可以获得 64 位支持,但目前不是一个选项。

【问题讨论】:

  • 哈哈,不错。您无需购买新计算机即可在代码中声明具有 64 位变量。
  • this的可能重复

标签: c++ biginteger


【解决方案1】:

使用long long 或包括stdint.hcstdint 并使用int64_tuint64_t。 除此之外,您可以在http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx参考Windows数据类型

从此列表中,您可以使用DWORDLONGDWORD64INT64

【讨论】:

    【解决方案2】:

    打印号码,请使用 %lld 和 printf:

    long long variable;
    printf( "your long long variable: %lld", variable ); 
    

    【讨论】:

      【解决方案3】:

      使用long long,它至少是 64 位的,并且在 32 位机器上也可用。

      【讨论】:

      • 严格来说,long long 至少为 8 位,并且至少与long 一样大。语言无法保证更多。
      • @DonReba:该标准保证long long 的可表示值的最小范围。只能满足 64 位或更多位的范围。
      • @BenjaminLindley,我没看到。标准在哪里做到这一点? “声明为字符 (char) 的对象应足够大以存储实现的基本字符集的任何成员。” (C++11 3.9.1.1) 最小范围就是这样。
      • @DonReba:C99 标准库定义了 5.2.4.2.1 中的值,它定义了 <limits.h> 标头的内容。 C++11标准在18.3.3中引用了C99标准,明确说明<climits>标头的内容与C标准中的<limits.h>相同。
      • @BenjaminLindley 它还指出“ 中的宏定义的常量类型不需要与宏所引用的类型相匹配。”标头对基本 C++ 类型没有任何限制。
      【解决方案4】:

      还有GMP 库用于任意大小的有符号整数,甚至>2^64。 C++ 接口通过运算符重载使变量的行为与普通整数一样。

      【讨论】:

        猜你喜欢
        • 2011-04-23
        • 1970-01-01
        • 2019-04-16
        • 2015-05-21
        • 2019-04-13
        • 1970-01-01
        • 2012-03-13
        • 2011-10-04
        • 1970-01-01
        相关资源
        最近更新 更多