¿Cuál es el resultado del número cuando se desplaza a la izquierda por -1 en la programación C usando el operador de desplazamiento a la izquierda ?
p.ej:
23 << -1Del estándar C11 6.5.7p3 (para versiones anteriores es básicamente lo mismo):
"Si el valor del operando derecho es negativo o es mayor o igual que el ancho del operando izquierdo promocionado, el comportamiento es indefinido".
OIA: comportamiento indefinido . Prepárate para los demonios nasales .
Brevemente: no
Precaución: Si bien muchos programadores son conscientes de ello y evitan los recuentos de desplazamiento negativos, a menudo se ignora que también los recuentos >= el tamaño de bits del valor tampoco están definidos. Esto hace algo como ((unsigned int)1 << 32) - 1 realmente indefinido si unsigned int tiene 32 bits o menos. Para los valores con signo, las cosas se vuelven más complicadas debido al signo (gracias @chux por señalarme eso). Esta es una trampa común. Para algunas implementaciones, pueden producirse resultados diferentes para expresiones constantes (evaluadas en tiempo de compilación) y en tiempo de ejecución.
Como dijo Olaf en su respuesta, el desplazamiento a la izquierda por un número negativo no está definido.
De hecho, gcc le dará una advertencia si intenta cambiar en cualquier dirección por un número negativo.
Operador de desplazamiento a la izquierda bit a bit en C:

Sintaxis:
**[variable]<<[number of places]**Si el número de lugares se vuelve negativo, será indefinido