Re: [問題] 我自學C++ 接下來我該怎麼走

看板C_and_CPP作者 (比爾蓋天)時間16年前 (2010/02/16 22:36), 編輯推噓5(508)
留言13則, 4人參與, 最新討論串4/9 (看更多)
※ 引述《ale34354 (雞屎)》之銘言: : 1. : 答案顯示不出來因為超出範圍long int的範圍是-2147483648-2147483647 : 這個乘以後是2400000000 : 問一下 40000L "L"是什麼意思 我不知道 所以我就假設他是40000 既然原po已經回答了,我也想說明一下為什麼我主張改成unsigned會比較好。 我的推文寫到即使題目改成unsigned,也可以更改變數值到超過能表述的範圍。 此時詢問學生"為什麼?"的意義會和signed一樣甚或更好。 根據C++ Primer 4/e侯捷老師所翻譯的中文本p.37, 在同樣超出能表述範圍的情況下, unsigned的結果是該數值除以所能表述的最大值的餘數, 而signed的結果則是由編譯器決定。 有時我們習慣使用自己慣用的編譯器來編譯執行,再看結果是什麼, 卻很容易忽略像是未定義行為,或編譯器有權決定等等的因素會影響答案。 當然出題者是要問"為什麼?",而不只是要一個數值, 但我以為同時有signed和unsigned對照在這題會比較完整。 另外,在版上有看到推文建議原po應該閱讀的書籍。 如果不講求速效的話,C++ Primer遲早還是要看的。 然而, 讀英文版英文要好;讀中文版中文要好, 這不管在那一本書的那一種版本都適用。 比爾蓋天 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.177.97

02/16 22:47, , 1F
我是想要表達 2's 補數,如何表示 負的整數的 想法
02/16 22:47, 1F

02/16 22:48, , 2F
所以,才這樣子出題目的。計算機概論 一定會討論到
02/16 22:48, 2F

02/17 02:48, , 3F
拿undefined behavior來考人總是不太好..
02/17 02:48, 3F

02/17 02:48, , 4F
除非你真的是想考他知不知道undefined behavior
02/17 02:48, 4F

02/17 06:22, , 5F
在K&R裡面,page 2-3 有提到,signed 型別,使用 2's 補數
02/17 06:22, 5F

02/17 06:23, , 6F
的表示法,所以並不是 未定義行為。我使用 Fortran, LISP
02/17 06:23, 6F

02/17 06:24, , 7F
都得到相同的結果。所以 應該沒問題。就是 這樣。
02/17 06:24, 7F

02/17 06:29, , 8F
你可以告訴我,哪裡有提到這是 未定義的行為嗎?
02/17 06:29, 8F

02/17 06:45, , 10F
pdf 請接網址然後查"integer overflow"或"overflow"
02/17 06:45, 10F

02/17 06:45, , 11F
是standard的pdf,不是惡意連結,請放心。
02/17 06:45, 11F

02/18 22:34, , 12F
那個~~signed使用2's補數表示法儲存, 與signed型態遇到
02/18 22:34, 12F

02/18 22:34, , 13F
overflow時的處理方式是兩件事喔, 我想BS大是這個意思:)
02/18 22:34, 13F
文章代碼(AID): #1BUgruI9 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BUgruI9 (C_and_CPP)