gpt4 book ai didi

c++ - 添加无符号数而不使用 '+' 或 '++'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:27 26 4
gpt4 key购买 nike

我需要添加 2 个无符号数 'a' 和 'b'。

我找到了以下代码,使用位操作

unsigned int add (unsigned int a,unsigned int b)
{
unsigned int carry, sum;
if (b == 0)
{
return a;
}

sum = a ^ b; // xor takes sum
carry = a & b; // collect carry;
carry = carry << 1;
return ( add (sum, carry) );
}

我不知道这段代码是如何将两个数字相加的。

任何帮助/指导的人。

最佳答案

逻辑:代码实现了一系列half-adders并通过递归将进位从其中一个传播到下一个。有关其工作原理的示例,请参见试运行。

考虑这两个值 a=0011b=0101 .在基数 10 中,它们是 a=3b=5分别。

现在,a^b=0110 ( 1 仅当单个位为 1 时)而 a&b=0001 (1 仅当两位都为 1 时,您可以进位的唯一情况)。

然后,你需要将进位移动到下一位,这就是为什么你有 <<1操作,制作carry=0010 .

现在你需要添加01100010使用上面的算法。这将变成添加 01000100 .这将导致添加 00001000这将导致添加 10000000这将通过基本案例 (b == 0) 结束。

以表格形式:

|   a  |   b  | a^b  |  a&b | carry|
------------------------------------
| 0011 | 0101 | 0110 | 0001 | 0010 |
| 0110 | 0010 | 0100 | 0010 | 0100 |
| 0100 | 0100 | 0000 | 0100 | 1000 |
| 0000 | 1000 | 1000 | 0000 | 0000 |
| 1000 | 0000 | ---- | ---- | ---- |

最后一行是基本情况。

关于c++ - 添加无符号数而不使用 '+' 或 '++',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18720585/

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