Operador de cambio poco inteligente con cambio por número negativo
Me encontré con un escenario interesante, cuando trabajaba con un operador de cambio a nivel de bit. Si el segundo operando es negativo, ¿cómo funciona la operación de desplazamiento a nivel de bits? .
es decir, a << b, "<<" desplaza un patrón de bits a la izquierda por b bits en a. Pero si b es neagtive, ¿no debería ser un error en tiempo de ejecución?
¿Puedo ejecutar el código siguiente con éxito pero no entiendo cómo funciona?
public static void bitwiseleftShift(char testChar)
{
int val=testChar-'a';
int result= 1<<val;
System.out.println("bit wise shift of 1 with val="+val+" is "+result);
}
Entrada
bitwiseleftShift('A');// ASCII 65
bitwiseleftShift('0'); // ASCII 48
Resultados
bit wise shift of 1 with val=-32 is 1
bit wise shift of 1 with val=-49 is 32768
ASCII para 'a' es 97. ¿Puede alguien ayudarme a entender cómo funciona esto?