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?