System.out.println((byte)((byte)-128 >>> 3));
出力結果:-16

-128は10000000だから00010000で16になるんじゃないの?
なんで最上位ビットが1のままなのか?