几天前,我在那里参加了微软 GD 实习在线考试。我一直在研究负数左移是一种未定义的行为,但该论文的 30 个问题中几乎有 7 个问题与移位运算符相关,其中大约 5 个问题涉及将负数向左移动,而且他们没有选择说“未定义”行为”。看到这一幕我很震惊。所以,我的问题是这个 C 标准有改变吗?现在已经定义了吗?
示例问题:
printf("%d",-1<<10);
I marked its answer as -1024 by the logic 2^10*-1
我什至在 gcc 上运行了这个,它给我的 o/p 为 -1024 nly (当我回家时。)
规则没有改变。它在技术上仍然是未定义的。
引用 C 标准(n1548 第 6.5.7 节第 4 段):
E1 否则,行为是未定义的。
它清楚地表明如果E1
不是无符号的或带有非负值的符号,行为未定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)