作者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/cn.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