为什么左移一个负的有符号值是不明确的行为?

时间:2017-06-23 06:25:00

标签: c language-lawyer undefined-behavior bit-shift shift

在一次采访中询问了这个问题。

负值的左移>>具有未定义行为的原因是什么,而负号有效号码的右移<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有签名类型和负值,   结果值是实现定义的。

为什么负值有符号值的左移不是明确定义的行为?

0 个答案:

没有答案