看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
h520:想順便問一下寫在一行是左邊先做還是右邊先做 有點忘了^^" 10/24 15:14
yauhh:assignment應該都要右結合. 左結合比較難解釋什麼意思. 10/24 15:29
wowtiger:這也應該列入常見問題了 xor_swap 是一個很爛的東西 10/24 21:44
bdvstg:印象中xor_swap在某種狀況下會出錯.... 10/24 23:25
james732:當兩個數字相同的時候會錯 XDDD 10/24 23:27
glennchen:把變數帶入式子變換一下 真的會得到swap(x, y); 10/24 23:30
hilorrk:所以前面要多個x == y || 10/24 23:33
LPH66:不是相同時 是 x 和 y 是同一個變數時會錯 10/24 23:40
LPH66:如果只是值相同但不同變數的話不會全部清空的 10/24 23:41
glennchen:這...... 10/24 23:42
LPH66:總之不要用就對了 10/24 23:42
james732:我喜歡樓上的結論 XDDDD 10/24 23:43
loveme00835:真的是這樣...怪人才會用這招 :「我跑好快我好強」 10/24 23:50
purpose:如果是寫單晶片的人會常用這些嗎?感覺他們資源比較吃緊 10/25 00:06
LPH66:我猜他們會直接用組語下swap... 10/25 00:40
purpose:瞭解了... 10/25 01:04
xatier:xor_swap中 參數用浮點數就不能用了XD 10/25 18:18
AntaresStar:浮點數的話用指標強制cast成int也是可以用的 只是很怪 10/27 22:39
akasan:倒不是怪不怪的問題 如果該機器上無法對存floating point 10/28 00:48
akasan:的 register 做 xor 的話只會多出一堆 mov 原本想要快一點 10/28 00:48
akasan:就整個變成反效果了 10/28 00:49