Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法的澄清解_Algorithm_Binary - Fatal编程技术网

Algorithm 算法的澄清解

Algorithm 算法的澄清解,algorithm,binary,Algorithm,Binary,我正在研究一个如下的问题: “编写两个数字相加的函数。不应使用+或任何算术运算符。” 在基数10中,要添加两个数字,可以将添加过程分为两个步骤: 1) 无进位加法 2) 只有结转值 将两者相加。解决方案基本上就是这样做的,但会在值为1)和值为2)的情况下递归,直到没有更多的携带值为止。我不理解这一点的直觉——我们怎么知道最终的结转值将为零 以下是解决方案: int Add(int x, int y) { if (y == 0) return x; else

我正在研究一个如下的问题:

“编写两个数字相加的函数。不应使用+或任何算术运算符。”

在基数10中,要添加两个数字,可以将添加过程分为两个步骤:

1) 无进位加法

2) 只有结转值

将两者相加。解决方案基本上就是这样做的,但会在值为1)和值为2)的情况下递归,直到没有更多的携带值为止。我不理解这一点的直觉——我们怎么知道最终的结转值将为零

以下是解决方案:

int Add(int x, int y)
{
    if (y == 0)
        return x;
    else
        return Add( x ^ y, (x & y) << 1);
}
intadd(intx,inty)
{
如果(y==0)
返回x;
其他的

返回Add(x^y,(x&y)如果我们使用的是具有固定位数(例如32位整数)的整数表示,那么我们可以进行如下推理:

在对
Add
的任何给定调用中,假设
y
以n个零值位结尾。(例如,如果
y
的二进制表示以
1000
结尾,则n是3。)

然后
x&y
以至少n个零值位结束,因为无论
y
在哪里,它都会有零值位

(x&y)观察
(x&y)