看板 C_and_CPP 關於我們 聯絡資訊
由片語學習C程式設計的習題 題目如連結:https://judgegirl.csie.org/problem/0/222 我的程式碼連結:http://codepad.org/cE1fx1z1 我的問題是 第20行,當i == 7時,我預期~lld_zero << ((i + 1) * 8)64個bit應該都是0, 但實際上64個bit都是1,為什麼? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.143.53.11 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1532300478.A.51F.html ※ 編輯: jai23012 (220.143.53.11), 07/23/2018 07:06:36
kmap: gcc warning: left shift count >= width of type 07/23 09:08
kmap: 根據標準 是undefined behavior 07/23 09:09
tinlans: 其實上過計組的話就會知道 shifter 的構成方式了,它並 07/24 05:52
tinlans: 非是從暫存器讀出一個數字 N,然後把 shift 拿來反覆做 N 07/24 05:53
tinlans: 次,但是一般人會以為是這樣,才會想說就算標準講未定義 07/24 05:53
tinlans: 實際上也只是 loop 次數超過而已,怎麼可能不如預期。 07/24 05:54
tinlans: 結果實際跑出來都會被打臉,其實標準之所以那樣定,背後 07/24 05:55
tinlans: 都有它的意義存在。 07/24 05:55
alan23273850: 如果shift 63次結果為何,用unsigned結果為何 07/28 11:01
alan23273850: 求tin大解釋計組 07/28 11:13