contributed by < void110916 >
1(a >> 1) + (b >> 1) 在 a, b 均為偶數時滿足平均的結果,因此須考慮的 EXP1 為在 a, b 在均為奇數時的進位情況,因此 EXP1 為:
當 a, b 在 bit 同時為 1 時,會先經過進位( << 1),再除以2( >> 1),因此該動作會互相抵銷,則 EXP2 為:
而在其他情況時,因為不會進位,只會有除以2( >> 1)的動作,因此 EXP3 為:
以 Intel® 64 and IA-32 Architectures Optimization Reference Manual Table D-17. General Purpose Instructions 為例,MOV ADD 所需 Latency & Throughput 在同架構下均一樣,而 SHR Throughput 略多 0.5 至 1 倍,
2XOR 真值表:
| X\Y | 1 | 0 |
|---|---|---|
| 1 | 0 | 1 |
| 0 | 1 | 0 |
可以視為 XOR 表示該位元是否一樣,因此以下為 XOR 的特性:
a^a=0:所有位元都一樣,所以均為0a^b=b^a:對調不影響不一樣的位元位置a^b^a=a^a^b=b-1 以二進制表示為 0xffff_ffff ,為全開遮罩;0 以二進制表示為 0x0000_0000 ,為全關遮罩,因此 EXP4 為:
EXP5 為:
當 時, a ^ b 通過遮罩後的結果為 a ^ b ,因此回傳結果為 a ^ b ^ a = b
當 時, a ^ b 通過遮罩後的結果為 0 ,因此回傳結果為 a ^ 0 = a
3COND:
RET:
4EXP6:
5M:
X: