gpt4 book ai didi

c++ - 大整数类的位操作?

转载 作者:行者123 更新时间:2023-11-28 08:24:44 24 4
gpt4 key购买 nike

我在为 C++ 中的大整数类提出算法时遇到问题。我最初的想法是使用数组/列表,但效率很低。然后我发现了类似以下类(class)的事情: http://www.codeproject.com/KB/cpp/CppIntegerClass.aspx

但是,我发现这种方法确实令人困惑。我不知道如何使用位操作,而且我几乎看不懂代码。请有人向我解释如何使用位操作,它是如何工作的等等。最终我想创建我自己的大整数类,但我只是一个新手程序员,我刚刚学会了如何使用类。

基本上我的问题是:如何使用位操作来创建大整数类?它是如何工作的??

谢谢!

最佳答案

首先阅读 binary numbers一般来说。该页面显示了常见的算术运算(加法、减法等)如何对二进制数进行运算,即如何对数字进行逐位运算以获得所需的结果。

一旦您知道为什么使用了位操作,将其映射到编程语言(例如 C++)应该非常简单。

根据我的经验,实现类似这样的东西时最明显的面向位的事情是位测试,以检查溢出。假设您将大二进制数表示为 uint16_t 的数组,即 16 位的 block 。在实现加法时,您将从两个数字的最低有效端开始,并将它们相加。如果总和大于65535,则需要将一个“进位”到下一个uint16_t ,就像一次添加一位小数一样。

这可以通过这样的测试来实现:

const uint16_t *number1;
const uint16_t *number2;

/* assume code goes here to set up the number1 and number2 pointers. */

/* Compute sum of 16 bits. */
uint16_t carry = 0;
uint32_t sum = number1[0] + number2[0];

/* One way of testing for overflow: */
if (sum & (1 << 16))
carry = 1;

在这里,1 << 16表达式通过向左移动 1 十六步来创建掩码。 &按位和运算符根据掩码测试总和;如果在 sum 中设置了第 16 位,结果将为非零(即在 C++ 中为真) .

关于c++ - 大整数类的位操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4429056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com