Re: [問題] Dev C的問題
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.112.30.54
: ※ 編輯: chhsiao 來自: 140.112.30.54 (09/29 00:31)
: ※ 編輯: chhsiao 來自: 140.112.30.54 (09/29 00:39)
: 推 imprazaguy:題外話,^有一個應用,就是可以做變數值交換的動作 09/29 00:37
: → imprazaguy:#define swap(a,b) ((a)^=(b)^=(a)^=(b)) 09/29 00:39
這是從 IOI 97 的解答學到的招數
其實一點都不神奇,只要把 truth table 畫出來看一看就知道了。
不過其實這樣寫,除了唬人以外,大部份的時候都沒比較好。
這樣寫 跟 {int t; t = a; a = b; b = t;} 比起來,
反而用的運算還比較多,所以效率其實比較差。
而且在 i386 的機器上有內建 exchange instruction,
如果 compiler 的最佳化做得夠好,
後者的型式有可能直接以一個 instruction 取代,
不過 XOR 交換法嘛.... 我相信沒幾個 compiler 會偵測出來 XD
這個寫法唯一的好處是,當要交換的 datatype 不固定時,不用去管 datatype。
不過可以做 ^ 運算,而 int 存不下的,也只有 long long int 了,
所以......意義還是不大 XD
BTW, 這個寫法是 P 老師的 good programming style 裡 "標準" 的反例 XD
--
n;main(i){return n?i<2?i:main(i-1)+main(i-2):
scanf("%d",&n)&&printf("%d\n",n>0?main(n):0);}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.54
※ 編輯: chhsiao 來自: 140.112.30.54 (09/29 00:54)
→
09/29 00:55, , 1F
09/29 00:55, 1F
推
09/29 01:00, , 2F
09/29 01:00, 2F
→
09/29 01:02, , 3F
09/29 01:02, 3F
→
09/29 01:04, , 4F
09/29 01:04, 4F
推
09/29 01:04, , 5F
09/29 01:04, 5F
推
09/29 01:10, , 6F
09/29 01:10, 6F
※ 編輯: chhsiao 來自: 140.112.30.54 (09/29 01:19)
討論串 (同標題文章)