¿Por qué la operación de desplazamiento a la izquierda invoca Comportamiento indefinido cuando el operando del lado izquierdo tiene un valor negativo?

En C, la operación de desplazamiento a la izquierda en modo bit invoca el comportamiento indefinido cuando el operando del lado izquierdo tiene un valor negativo.

Cita relevante de ISO C99 (6.5.7 / 4)

El resultado de E1 << E2 es E1 posiciones de bit E2 desplazadas a la izquierda; los bits vacíos se llenan con ceros. Si E1 tiene un tipo sin signo, el valor del resultado es E1 × 2E2, redujo el módulo uno más que el valor máximo representable en el tipo de resultado. Si E1 tiene un tipo con signo y un valor no negativo, y E1 × 2E2 es representable en el tipo de resultado, entonces ese es el valor resultante; de otra manera,el comportamiento es indefinido.

Pero en C ++ el comportamiento está bien definido.

ISO C ++ - 03 (5.8 / 2)

El valor de E1 << E2 es E1 (interpretado como un patrón de bits) posiciones de bits E2 desplazadas a la izquierda; los bits vacantes están llenos de cero. Si E1 tiene un tipo sin signo, el valor del resultado es E1 multiplicado por la cantidad 2 elevada a la potencia E2, módulo reducido ULONG_MAX + 1 si E1 tiene un tipo sin signo largo, UINT_MAX + 1 de lo contrario. [Nota: las constantes ULONG_MAX y UINT_MAX se definen en el encabezado). ]

Eso significa

int a = -1, b=2, c;
c= a << b ;

invoca Comportamiento indefinido en C pero el comportamiento está bien definido en C ++.

¿Qué obligó al comité ISO C ++ a considerar ese comportamiento bien definido en oposición al comportamiento en C?

Por otro lado, el comportamiento esimplementation defined para la operación de desplazamiento a la derecha bit a bit cuando el operando izquierdo es negativo, ¿verdad?

Mi pregunta es por qué la operación de desplazamiento a la izquierda invoca Comportamiento indefinido en C y por qué el operador de desplazamiento a la derecha invoca solo el comportamiento definido por la implementación.

P.S: Por favor, no dé respuestas como "Es un comportamiento indefinido porque el Estándar lo dice". :PAGS

Respuestas a la pregunta(8)

Su respuesta a la pregunta