廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3884 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
billy7074396 手機
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x2 鮮花 x25
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++][求助] 求救啊!!這個運算式有詳解嗎??
  這樣的答案會是64


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

..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



獻花 x0 回到頂端 [樓 主] From:臺灣中華電信股份有限公司 | Posted:2013-11-02 17:40 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

(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


My BOINC stats :

獻花 x1 回到頂端 [1 樓] From:台灣寬頻通訊顧問股份有限公司 | Posted:2013-11-03 14:35 |
billy7074396 手機
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x2 鮮花 x25
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

感謝感謝!!! 分析得很清楚!!!

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

感謝解答~~


獻花 x0 回到頂端 [2 樓] From:臺灣中華電信股份有限公司 | Posted:2013-11-04 21:55 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.057440 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言