这个完整的加法器实现是否正确?
问题描述:
有this后,最近收到upvotes的一些显着的一堆,询问有关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;
}
我测试了几次,它似乎工作。事情是,它比引用的文章中的实现快得多,在x86上没有任何跳转。
我的执行是正确的还是有什么问题我不知道?
我无法想象我的代码比经常看到和审查的帖子的代码更快。
我没有检查,但它可能是正确的。不要认为人们总是可能写出最有效的代码;所有这些答案主要是为玩具问题或演示目的而创建的,而不是实际使用(+仍然更快)。 – Cubic
这两个例子是不同的,第一个在循环中每个指令运行一位,在你的所有位都受到影响。编译器也可能已经优化了你的代码。 – purplepsycho
尝试添加3和7,它输出2. – Kenney