求救啊!!這個運算式有詳解嗎??

Home Home
引用 | 編輯 billy7074396
2013-11-02 17:40
樓主
推文 x0
  這樣的答案會是64


  但是我用手算實在是不知道為甚麼會是64

..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 ebolaman
2013-11-03 14:35
1樓
  
(1.) 等於 a = y *= (x%y > x-y ? --x : y++);
(2.) 等於 a = y *= (0 ? --x : y++);
(3.) 等於 a = y *= y++;

注意不同的編譯環境下可能對 y *= y++ <Y = -8> 有不同的定義
例如在 GNU C++ 中結果是 56
在 GNU C 中結果是 64
在 Visual Studio C++ 中結果是 64

手算的話,(1.) 看起來等於 (2.) 但是實際上組合語言完全不同,答案會有落差,
(2.) 會被編譯器優化成 (3.) 造成手算答案難以判斷

此題實際正解是 56 (GNU C/C++ & VS C++)
程式設計上最好避免這種狀況,以免在不同的編譯環境下產生不同的結果

詳細請參考 C/C++ Sequence Point 和 Side Effects

獻花 x1
引用 | 編輯 billy7074396
2013-11-04 21:55
2樓
  
感謝感謝!!! 分析得很清楚!!!

因為考試題庫有這題 可我就是算出來卻總是怪怪的! > <

感謝解答~~

獻花 x0