Nieco mądry operator zmiany biegów z przesunięciem o liczbę ujemną

Natknąłem się na ciekawy scenariusz, podczas pracy z operatorem przesunięcia bitowego. Jeśli drugi operand jest ujemny, jak działa operacja przesunięcia bitowego? .

tj. << b, „<<” przesuwa wzór bitowy w lewo o b bitów w a. Ale jeśli b jest neagtive, czy nie powinno to być błędem w czasie wykonywania?

Mogę pomyślnie uruchomić poniższy kod, ale nie rozumiem, jak to działa?

 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);
}

Wkład

   bitwiseleftShift('A');// ASCII 65
   bitwiseleftShift('0'); // ASCII 48 

Wyniki

   bit wise shift of 1 with val=-32 is 1
   bit wise shift of 1 with val=-49 is 32768

ASCII dla „a” to 97. Czy ktoś może mi pomóc zrozumieć, jak to działa?

questionAnswers(1)

yourAnswerToTheQuestion