在一次采访中询问了这个问题。
负值的左移>>
具有未定义行为的原因是什么,而负号有效号码的右移<input type = "file" id="file" name = "file" size = "50"/>
具有实现定义行为
C11 $ 6.5.7:
第4段:
E1的结果&lt;&lt; E2是E1 左移 E2位位置;腾空 位用零填充。如果E1具有无符号类型,则值为 结果是E1 x 2 ^ E2,比最大值减少了一个模数 在结果类型中可表示。如果E1有签名类型和 非负值,E1 x 2 ^ E2可在结果类型中表示, 那就是结果价值;否则,行为是 未定义。
第5段:
E1&gt;的结果&gt; E2是E1 右移 E2位 位置。如果E1具有无符号类型,或者E1具有带符号类型和a 非负值,结果的值是不可分割的一部分 E1 / 2 ^ E2的商。如果E1有签名类型和负值, 结果值是实现定义的。
为什么负值有符号值的左移不是明确定义的行为?