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

Jay*_*esh 9 c bit-shift shift undefined-behavior language-lawyer

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

<<负值左移具有未定义行为的原因是什么,而>>负数签名数的右移具有实现定义的行为

C11 $ 6.5.7:

第4段:

E1 << E2的结果是E1 左移 E2位位置; 腾出的位用零填充.如果E1具有无符号类型,则结果的值为E1 x 2 ^ E2,模数比结果类型中可表示的最大值减1.如果E1具有有符号类型和非负值,并且在结果类型中可以表示E1 x 2 ^ E2,那么这就是结果值; 否则,行为未定义.

第5段:

E1 >> E2的结果是E1 右移 E2位位置.如果E1具有无符号类型或者E1具有有符号类型和非负值,则结果的值是E1/2 ^ E2的商的整数部分.如果E1具有带符号类型和负值,则结果值是实现定义的.

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