Operador de deslocamento bit wise com deslocamento por número negativo

Eu me deparei com um cenário interessante, ao trabalhar com o operador de deslocamento bitwise. Se o segundo operando for negativo, como funciona a operação de deslocamento bit a bit? .

isto é, um << b, "<<" muda um padrão de bits para a esquerda por b bits em a. Mas se b é neagtive, não deveria ser um erro em tempo de execução?

Eu posso executar o código abaixo com sucesso, mas não entendo como ele 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' é 97. Alguém pode me ajudar a entender como isso funciona?

questionAnswers(1)

yourAnswerToTheQuestion