Javaでプログラムを書いて、ゼロシフス(>>>)演算子で右シフトを使用します。 次のプログラムではすべてが良いです。Javaのゼロ充填演算子を使用した右シフト( ">>>")は、 "バイト"ではなく "int"でのみ動作します
class First
{
public static void main(String[] args)
{
int b = -1;
int c = b>>>2;
System.out.println(b);
System.out.println(c);
}
}
出力は次のとおりです。
-1
1073741823
すべてが上記のプログラムでは良いです。私はバイトのために同じプログラムを書くなら:
class First
{
public static void main(String[] args)
{
byte b = -1;
byte c = (byte)(b>>>2);
System.out.println(b);
System.out.println(c);
}
}
出力は次のとおりです。
-1
-1
それはむしろ「>>>」よりも、「>>」オペレータの作業のように見えます。私の期待される出力は:
-1
63
その背後にある概念を説明してください。
'(b >>> 2)'の型は 'int'です。したがって、ゼロは、「バイト」の2つの先頭ビットよりもはるかに重要なビットになります。 –
@David Wallaceしかし、bはバイトです。オペレータはバイト単位で動作しています。操作後はintを返しますが、その前には63になります。私は間違っているかもしれませんが、私は混乱しています.. –
なぜ "前に"それは63になる操作を言うのですか?操作後63までは何もありません。 '>>>'演算子は 'byte'ではなく' int'式に作用するので、変換は操作の前に行われます。 –