ビット単位のシフト演算子を使用しているときに、興味深いシナリオに出くわしました。2番目のオペランドが負の場合、ビット単位のシフト演算はどのように機能しますか?。
つまり、a << b、 "<<"は、ビットパターンをaのbビットだけ左にシフトします。しかし、bが否定的である場合、それは実行時のエラーではないでしょうか?
以下のコードを正常に実行できますが、どのように機能するのかわかりませんか?
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);
}
入力
bitwiseleftShift('A');// ASCII 65
bitwiseleftShift('0'); // ASCII 48
結果
bit wise shift of 1 with val=-32 is 1
bit wise shift of 1 with val=-49 is 32768
'a'のASCIIは97です。誰かがこれがどのように機能するかを理解するのを手伝ってもらえますか?