5分でJavaの中の>>>>>>、<<
>>>>>>と<<
結論:
>>右シフト、正数右シフト、高位補0、負数右シフト、高位補1>>>:右シフト、高位補0、正数負数を区別しない<注:1.左シフト右シフト符号ビットも一緒に移動する.高位低位補1/0とは、移動終了後に空になった位を全て補1/3とする.存在しない<<
正数にとって、>>と>>は同じで、いずれも右移高位補0は負数にとって、>>と>>は違います.>>右移高位補1,>>右移高位補0
左移乗と右削除を実现するには、>>と<负数用>>で正数になりますが、これ>>は何の役に立つのでしょうか...
次は以上の結論のコード検証です.
>>,>>>,<
テストコード:
出力:
intは32ビットですが、表示時は1番目の1から表示されるのでa>>2は30ビットのみ、a<<2は31ビットのみ表示されます
テストコード:
出力:
原符号、逆符号、補符号回顧:正数:原符号=逆符号=補符号 負数:元のコード;逆符号=原符号は符号ビットを除いて逆をとる.補数=逆符号+1=原符号符号符号符号符号符号符号符号ビットを除く逆+1 注:補数の補数=元の符号、すなわち符号ビットは不変で、残りのビットは逆+1をとる
例:-20原号:1001 0100逆符号:1110 1011補符号:1110 1100補符号の補符号:1001 0011+1=1000100
Javaで付与された値のレビュー:
Javaには十進法のほかにバイナリ賦値,八進法賦値,十六進法賦値がある
テストコード:
出力:
まとめ:バイナリ付与:前に0 bを加える;8進法賦値:前に0を加算します.16進数賦値:前に0 xを加える;
結論:
>>右シフト、正数右シフト、高位補0、負数右シフト、高位補1>>>:右シフト、高位補0、正数負数を区別しない<注:1.左シフト右シフト符号ビットも一緒に移動する.高位低位補1/0とは、移動終了後に空になった位を全て補1/3とする.存在しない<<
正数にとって、>>と>>は同じで、いずれも右移高位補0は負数にとって、>>と>>は違います.>>右移高位補1,>>右移高位補0
左移乗と右削除を実现するには、>>と<负数用>>で正数になりますが、これ>>は何の役に立つのでしょうか...
次は以上の結論のコード検証です.
>>,>>>,<
テストコード:
@Test
public void test() {
int a = 0b10011111111111111111111111111111;// , 32
int b = a>>2;
int c = a>>>2;
int d = a<<2;
System.out.println("a :"+a);
System.out.println("a :" + Integer.toBinaryString(a));
System.out.println("a>>2 :"+b);
System.out.println("a>>2 :" + Integer.toBinaryString(b));
System.out.println("a>>>2 :"+c);
System.out.println("a>>>2 :" + Integer.toBinaryString(c));
System.out.println("a<<2 :"+d);
System.out.println("a<<2 :" + Integer.toBinaryString(d));
}
出力:
a :-1610612737
a :10011111111111111111111111111111(32 )
a>>2 :-402653185
a>>2 :11100111111111111111111111111111(32 )
a>>>2 :671088639
a>>>2 :100111111111111111111111111111(30 )
a<<2 :2147483644
a<<2 :1111111111111111111111111111100(31 )
intは32ビットですが、表示時は1番目の1から表示されるのでa>>2は30ビットのみ、a<<2は31ビットのみ表示されます
テストコード:
@Test
public void test() {
int a = -16;
int b = a>>2;
int c = a>>>2;
int d = a<<2;
System.out.println("a :"+a);
System.out.println("a>>2 :"+b);
System.out.println("a>>>2 :"+c);
System.out.println("a<<2 :"+d);
}
出力:
a :-16
a>>2 :-4
a>>>2 :1073741820
a<<2 :-64
原符号、逆符号、補符号回顧:
例:-20原号:1001 0100逆符号:1110 1011補符号:1110 1100補符号の補符号:1001 0011+1=1000100
Javaで付与された値のレビュー:
Javaには十進法のほかにバイナリ賦値,八進法賦値,十六進法賦値がある
テストコード:
@Test
public void test() {
int a = 10;//
int b = 0b1010;//
int c = 012;//
int d = 0xa;//
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
}
出力:
a = 10
b = 10
c = 10
d = 10
まとめ:バイナリ付与:前に0 bを加える;8進法賦値:前に0を加算します.16進数賦値:前に0 xを加える;