[問題] x^=y ?

看板C_and_CPP作者 (死工程師 = = )時間13年前 (2010/10/24 14:13), 編輯推噓9(9019)
留言28則, 10人參與, 最新討論串1/2 (看更多)
昨天看到一個題目 int x=15; y=23; x^=y^=x^=y; 請問x,y的值是多少? 我用編譯器去執行 結果搞不懂結果怎麼來的 我以為是轉成二進位 再做位元處理 可是也不是這樣 好 我就把它簡化成 x^=y; 結果x=24 y=23 但我還是不知道怎麼來的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.226.169

10/24 14:14, , 1F
x^=y 即 x = x ^ y, ^是xor的意思, 所以請把x與y兩數的
10/24 14:14, 1F

10/24 14:14, , 2F
二進位值寫下, 然後照著運算式自己拿紙筆寫出一個直式運
10/24 14:14, 2F

10/24 14:15, , 3F
算一算, 就知道它的結果是什麼了:)
10/24 14:15, 3F

10/24 14:16, , 4F
話說, 您寫的結果好像不對吧?_?
10/24 14:16, 4F

10/24 14:17, , 5F
喔喔 @@ 因為只憑記憶去打這篇 所以可能記錯了
10/24 14:17, 5F

10/24 14:17, , 6F
我猜答案會是 23 15
10/24 14:17, 6F

10/24 14:19, , 7F
這讓我想到以前的題目: 如何只用一行指令交換兩個整數
10/24 14:19, 7F

10/24 14:20, , 8F
在某處先寫好SWAP的marco, 然後一行 SWAP(x, y); //XD
10/24 14:20, 8F

10/24 15:42, , 9F
樓樓上~一行怎麼寫啊XD
10/24 15:42, 9F

10/24 16:01, , 10F
該不會是一行裡面有兩三個; 或是用函數? 這犯規吧
10/24 16:01, 10F

10/24 16:47, , 11F
這個就是一行的integer swap不是嗎?
10/24 16:47, 11F

10/24 16:51, , 12F
還是我記憶有誤...那就別理我了XD...
10/24 16:51, 12F

10/24 17:24, , 13F
我覺得這違反第八誡,修改兩次以上了,應該是undefinded
10/24 17:24, 13F

10/24 17:26, , 14F
可是怪的是,它defined
10/24 17:26, 14F

10/24 18:04, , 15F
不怪啊 一直都是undefined. http://0rz.tw/epRl5
10/24 18:04, 15F

10/24 18:24, , 16F
不是,所說行為未定義和行為有定義,是很明確的. 並不是說
10/24 18:24, 16F

10/24 18:24, , 17F
一個變數改二次就叫做行為未定義. 像這一行x^=y^=x^=y 行為
10/24 18:24, 17F

10/24 18:25, , 18F
明明在語法上就看得很清楚.
10/24 18:25, 18F

10/24 18:28, , 19F
x^=y^=x^=y; => (x^=(y^=(x^=y))); 好像沒有第二種解釋?
10/24 18:28, 19F

10/24 18:28, , 20F
它是個右結合的東西,從左邊先做,結果也不會改變.應該是某個
10/24 18:28, 20F

10/24 18:29, , 21F
編譯器做錯了.
10/24 18:29, 21F

10/24 18:30, , 22F
yauhh去把上面的連結看完再來討論好嗎...
10/24 18:30, 22F

10/24 18:30, , 23F
不是expression怎麼拆的問題
10/24 18:30, 23F

10/24 18:31, , 24F
compiler有可能先evaluate左邊的x 並拿到修改前的值
10/24 18:31, 24F

10/24 18:33, , 25F
造成x^=(y^=(x^=y)) = (舊的x)^=(新的y) = 0
10/24 18:33, 25F

10/24 18:33, , 26F
c++ standard允許你這樣算.
10/24 18:33, 26F

10/24 18:37, , 27F
原來如此,還真沒想過這種型式的未定義行為...
10/24 18:37, 27F

10/25 18:14, , 28F
a = a+b; b = a-b; a = a-b; 這玩意跟它好像
10/25 18:14, 28F
文章代碼(AID): #1CmywDCq (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
問題
12
21
完整討論串 (本文為第 1 之 2 篇):
問題
9
28
問題
12
21
文章代碼(AID): #1CmywDCq (C_and_CPP)