[問題] 移位運算與預期不符

看板C_and_CPP作者 (jai23)時間7年前 (2018/07/23 07:01), 7年前編輯推噓2(208)
留言10則, 3人參與, 7年前最新討論串1/1
由片語學習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

07/23 09:08, 7年前 , 1F
gcc warning: left shift count >= width of type
07/23 09:08, 1F

07/23 09:09, 7年前 , 2F
根據標準 是undefined behavior
07/23 09:09, 2F

07/24 05:52, 7年前 , 3F
其實上過計組的話就會知道 shifter 的構成方式了,它並
07/24 05:52, 3F

07/24 05:53, 7年前 , 4F
非是從暫存器讀出一個數字 N,然後把 shift 拿來反覆做 N
07/24 05:53, 4F

07/24 05:53, 7年前 , 5F
次,但是一般人會以為是這樣,才會想說就算標準講未定義
07/24 05:53, 5F

07/24 05:54, 7年前 , 6F
實際上也只是 loop 次數超過而已,怎麼可能不如預期。
07/24 05:54, 6F

07/24 05:55, 7年前 , 7F
結果實際跑出來都會被打臉,其實標準之所以那樣定,背後
07/24 05:55, 7F

07/24 05:55, 7年前 , 8F
都有它的意義存在。
07/24 05:55, 8F

07/28 11:01, 7年前 , 9F
如果shift 63次結果為何,用unsigned結果為何
07/28 11:01, 9F

07/28 11:13, 7年前 , 10F
求tin大解釋計組
07/28 11:13, 10F
文章代碼(AID): #1RLGo-KV (C_and_CPP)