Re: [問題] x^=y ?

看板C_and_CPP作者 (喲)時間14年前 (2010/10/24 07:11), 編輯推噓12(1209)
留言21則, 13人參與, 最新討論串2/2 (看更多)
※ 引述《LinuxC (死工程師 = = )》之銘言: : 昨天看到一個題目 : int x=15; : y=23; : x^=y^=x^=y; : 請問x,y的值是多少? : 我用編譯器去執行 : 結果搞不懂結果怎麼來的 : 我以為是轉成二進位 : 再做位元處理 可是也不是這樣 : 好 我就把它簡化成 x^=y; : 結果x=24 y=23 : 但我還是不知道怎麼來的 的確是做位元處理啊, 語法上告訴你,這個跟那個位元互斥,結果再跟那個位元互斥...等等. 而且,怎麼敢直接化簡為x^=y? x^=y 的意思是 y 根本沒變過, 但是 x^=y^=x^=y 的 y 變過一次. x = 15, y = 23 做x^=y, x = 1111^10111 = 11000 = 24 y = 23 再做y^=x, x = 24 y = 10111^11000 = 1111 = 15 再做x^=y x = 11000^1111 = 10111 = 23 y = 15 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.208.175

10/24 15:14, , 1F
想順便問一下寫在一行是左邊先做還是右邊先做 有點忘了^^"
10/24 15:14, 1F

10/24 15:29, , 2F
assignment應該都要右結合. 左結合比較難解釋什麼意思.
10/24 15:29, 2F

10/24 21:44, , 3F
這也應該列入常見問題了 xor_swap 是一個很爛的東西
10/24 21:44, 3F

10/24 23:25, , 4F
印象中xor_swap在某種狀況下會出錯....
10/24 23:25, 4F

10/24 23:27, , 5F
當兩個數字相同的時候會錯 XDDD
10/24 23:27, 5F

10/24 23:30, , 6F
把變數帶入式子變換一下 真的會得到swap(x, y);
10/24 23:30, 6F

10/24 23:33, , 7F
所以前面要多個x == y ||
10/24 23:33, 7F

10/24 23:40, , 8F
不是相同時 是 x 和 y 是同一個變數時會錯
10/24 23:40, 8F

10/24 23:41, , 9F
如果只是值相同但不同變數的話不會全部清空的
10/24 23:41, 9F

10/24 23:42, , 10F
這......
10/24 23:42, 10F

10/24 23:42, , 11F
總之不要用就對了
10/24 23:42, 11F

10/24 23:43, , 12F
我喜歡樓上的結論 XDDDD
10/24 23:43, 12F

10/24 23:50, , 13F
真的是這樣...怪人才會用這招 :「我跑好快我好強」
10/24 23:50, 13F

10/25 00:06, , 14F
如果是寫單晶片的人會常用這些嗎?感覺他們資源比較吃緊
10/25 00:06, 14F

10/25 00:40, , 15F
我猜他們會直接用組語下swap...
10/25 00:40, 15F

10/25 01:04, , 16F
瞭解了...
10/25 01:04, 16F

10/25 18:18, , 17F
xor_swap中 參數用浮點數就不能用了XD
10/25 18:18, 17F

10/27 22:39, , 18F
浮點數的話用指標強制cast成int也是可以用的 只是很怪
10/27 22:39, 18F

10/28 00:48, , 19F
倒不是怪不怪的問題 如果該機器上無法對存floating point
10/28 00:48, 19F

10/28 00:48, , 20F
的 register 做 xor 的話只會多出一堆 mov 原本想要快一點
10/28 00:48, 20F

10/28 00:49, , 21F
就整個變成反效果了
10/28 00:49, 21F
文章代碼(AID): #1CmzmVAZ (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
9
28
14年前, 2010/10/24 06:13
完整討論串 (本文為第 2 之 2 篇):
問題
12
21
問題
9
28
14年前, 2010/10/24 06:13
文章代碼(AID): #1CmzmVAZ (C_and_CPP)