作者jai23012 (jai23)
看板C_and_CPP
標題[問題] 移位運算與預期不符
時間Mon Jul 23 07:01:15 2018
由片語學習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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1532300478.A.51F.html
※ 編輯: jai23012 (220.143.53.11), 07/23/2018 07:06:36
1F:→ kmap: gcc warning: left shift count >= width of type 07/23 09:08
2F:→ kmap: 根據標準 是undefined behavior 07/23 09:09
3F:→ tinlans: 其實上過計組的話就會知道 shifter 的構成方式了,它並 07/24 05:52
4F:→ tinlans: 非是從暫存器讀出一個數字 N,然後把 shift 拿來反覆做 N 07/24 05:53
5F:→ tinlans: 次,但是一般人會以為是這樣,才會想說就算標準講未定義 07/24 05:53
6F:→ tinlans: 實際上也只是 loop 次數超過而已,怎麼可能不如預期。 07/24 05:54
7F:→ tinlans: 結果實際跑出來都會被打臉,其實標準之所以那樣定,背後 07/24 05:55
8F:→ tinlans: 都有它的意義存在。 07/24 05:55
9F:推 alan23273850: 如果shift 63次結果為何,用unsigned結果為何 07/28 11:01
10F:推 alan23273850: 求tin大解釋計組 07/28 11:13