符号なしで右に移動-1?Javaシフトについては知らない人が多いです

631 ワード

前にjavaのソースコードを見たとき、ある文を見て、型全体が記号なしで右に負の数(1024>>-22など)を移動して、その時驚きました:“まだこのような操作があって、先生は教えたことがありません”、先生は確かに教えたことがありません!その時、ネットで調べたところ、intタイプに対して、シフト操作はシフトパラメータがバイナリに変換された後に対応する後5ビット(bit)に注目するだけであることが分かった.longは後6位に注目した.栗を挙げます.
System.out.println(1024 >>> 10 == 1024 >>> 42);// true
System.out.println(1024 >>> 10 == 1024 >>> -22);// true

ここで、10がバイナリに変換された後は1010、42がバイナリに変換された後は10101、-22がバイナリに変換された後は11111111111111111111111111111111111111111111101010となり、全てが最後の5 bitで01010となるので、符号なしで右に移動した後は等しい.印象の中で多くの本がこの知識点を説明していないはずで、大学に入ったとき、先生は更にこれを言ったことがありません.