有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