这个全加器实现是否正确?

Is this full adder implementation correct?

this post,最近收到了一些非常好的赞成票,询问 C 中的 + 运算符。
它显示了以下实现:

// replaces the + operator
int add(int x, int y) {
    while(x) {
        int t = (x & y) <<1;
        y ^= x;
        x = t;
    }
    return y;
}

巧合的是,我自己也写了一个实现(算法书练习)并想出了:

uint32_t bit_add(uint16_t a, uint16_t b) {
    uint32_t carry = ((uint32_t) a & b) << 1;
    uint16_t add = a ^ b;

    return carry ^ add;
}

我测试了几次,似乎有效。事实是,它比引用的 post 的实现要快得多,在 x86 上没有任何跳转。

我的实现是正确的还是有什么我不知道的错误?
我无法想象我的代码比经常看到和评论的 post 的代码更快。

您的功能不起作用。

一个简单的反例是 127 + 1。

这个很容易看出来。数字 127 的所有最低有效位 7 位都设置为 1。And 将其与数字 1 进行运算,并将其向左移动一位,将给出值 2。从那时起,使用运算符 xor ,我们没有可用的值组合可以产生大于 127 的值。