【问题标题】:Can I Make my Own Custom Data Type Larger than the Ones in C++? [duplicate]我可以使我自己的自定义数据类型比 C++ 中的更大吗? [复制]
【发布时间】:2012-08-24 02:56:28
【问题描述】:

可能重复:
How to implement big int in C++

例如,假设我有一个“long”类型的变量。 long 可以存储从 -⁠9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 的值。我是否可以创建自己的 C++ 数据类型,允许我创建无限大小的整数?我知道从记忆的角度来看这有点鲁莽,但我只是好奇。

【问题讨论】:

    标签: c++ types bigint


    【解决方案1】:

    哈!这是一个鲁莽的答案!

    只需创建一个动态创建和添加位集的类。要实现该类,您应该创建一个存储无符号长整数的向量(或任何您想要/需要的适当容器)(每个无符号长整数表示比它之前的维度更高的位集;您还可以使用任何您想要的 POD 类型想要)。

    为了使类具有几乎无限的可能值,您应该实现值溢出和下溢的自动检测(最好在运算符上)。对于溢出,您应该在最后一个位集之后添加一个更高维度的位集。应通过设置包含零值的参考位集来处理下溢。如果该值小于零(或最小值),则应在引用(或包含最低值的)位集之前添加一个位集。

    请阅读二进制算术和基数。他们应该给你这个想法(而且确实非常有用!)。

    【讨论】:

    • 谢谢,这正是我正在寻找的评论类型。这应该对我的科学博览会项目很有帮助,因为我正在做一个应该计算极大素数的程序。当您说每个 unsigned long 代表一个位集时,您的意思是第一个 long 可能是 110111011101011010101110 而第二个 long 将是 1110111000001110010110101 作为第一组位的延续?如果不使用默认的 C/C++ 原语,我如何将这个二进制混乱转换回以 10 为底的?不过答案很好:)
    • 抱歉耽搁了。是的。你是绝对正确的。您应该阅读有关基数转换(二进制到十进制)以及如何添加不同基维数的信息。如果您愿意,我可以通过电子邮件向您发送一个示例(或一些教程)。
    • 是的,那太棒了。对不起,我的电脑已经宕机了一段时间,我现在实际上正在使用另一台电脑。是啊,那样最好了。我的电子邮件是 sammnaser@gmail.com
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      是的,只需实施它(或谷歌)。一个例子是http://sourceforge.net/projects/cpp-bigint/

      【讨论】:

        猜你喜欢
        • 2013-08-26
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        • 2011-06-23
        • 2016-08-05
        • 2014-04-10
        相关资源
        最近更新 更多