Re: [問題] Dev C的問題

看板b96902HW作者 (bye~)時間16年前 (2007/09/29 00:51), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串3/3 (看更多)
: -- : ※ 發信站: 批踢踢實業坊(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
ACP的投影片還有介紹呢
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
#define swap(a,b) {int _;_=(a);(a)=(b);(b)=_;}
09/29 01:04, 5F

09/29 01:10, , 6F
對了 上面這樣寫要注意"傳進去"的變數不能叫 _ XD
09/29 01:10, 6F
※ 編輯: chhsiao 來自: 140.112.30.54 (09/29 01:19)
文章代碼(AID): #16_J4Ago (b96902HW)
討論串 (同標題文章)
文章代碼(AID): #16_J4Ago (b96902HW)