推 nowar100:這方法不好 有 side effect 04/11 14:21
→ nowar100:分三行寫吧,且我覺得可讀性大輸, 04/11 14:22
推 Yshuan:推樓上... 04/11 14:36
推 ledia:a^=(b^= (a^=b)) 最裡面那層做完, a 變成 a, b 的 bit diff 04/11 14:45
→ ledia:接下來 b^= (bit diff) -> 變成 a, 最後 bit_diff ^= a -> b 04/11 14:46
推 cismjmgoshr:a^a=0, a^b=b^a, (a^b)^c=a^(b^c), a^1=a 大概是這樣 04/11 15:22
→ littleshan:不要這樣寫!這是 implementation-defined behavior 04/11 15:48
→ littleshan:就是十誡之八啦 04/11 15:49
推 Ebergies:而且這個方法速度也比較慢... 04/11 15:58
→ TsinTa:剛剛測了一下,還真的比較慢@@" 04/11 16:18
→ sjgau:謝謝 大家的回覆,我大概懂了。等我有空,再來整理一下 04/11 17:15
→ yoco315:而且就算速度沒有比較慢,這個實作也存在一個很隱微的bugXD 04/11 18:00
→ yoco315:不過我也不知道這個方法比較慢耶.. 請教一下原因? 04/11 18:01
→ sjgau:是否有 side effect, 我會再詳細測試 04/11 18:54
→ sjgau:是否比較慢,我也會再 詳細測試 04/11 18:54
→ nowar100:side effect 不是你可以"詳細測試"出來的.... 04/11 19:10
推 purpose:要做三次xor,加上assignment。tmp=a; a=b; b=tmp; 做三次 04/11 19:34
→ purpose:assignment (mov) 就做完了 04/11 19:34
→ kevingwn:印象中編出來的asm反而比較長 04/11 22:06
推 wowtiger:因為對現行的CPU而言 xor 是要三個指令 mov 是沒有指令 04/11 22:06
推 laiis:如果只是交換... x=x+y; y=x-y; x=x-y; 這樣如何..? 04/11 22:15
推 wowtiger:跟 xor 是一樣的 除了一些有所謂 xor 特化的 CPU 之外 04/11 22:20
→ softwind:就講 不要這樣寫了... 你寫ASM才來考慮這問題 04/12 00:05
→ tropical72:我測過,實際上真的慢很多 (for vc6.0 2008 2010) 04/12 01:56
→ softwind:測速度 XXD 應該翻成ASM code來比 才知道哪邊有最佳化... 04/12 23:14