JAva取反-右シフト-左シフト-符号なし右シフトの検討
4068 ワード
:
,1 ,0
byte a = -1;
:10000001
:11111110
:11111111
// : 00000000
byte b = -2;
:10000010
:11111101
:11111110
// : 00000001
byte c = 3;
// 10000101
System.out.println(~a);
System.out.println(~b);
System.out.println(~c);
:
0
1
-4
右へ移動:正数右へ移動.負の数を右に移動、符号なしで右に移動
右に移動する記号は>>
記号なしで右に移動する記号:>>
左右のシフトでは、シフトがデータの長さを超えているかどうかに注意し、それを超えるとタッチ演算などを行います.
// :
// , 0
int a = 5;
System.out.println(a>>1);
// ; 0000000101
// : 0000000010
System.out.println(a>>2);
// ; 0000000101
// : 0000000001
System.out.println(a>>3);
// ; 0000000101
// : 0000000000
System.out.println(a>>31);
// ; 0000000101
// 32 : 0000000000
System.out.println(a>>32);
//int 32 , 32 , ,
System.out.println(a>>34);
// 32 , 34%32 = 2
//
System.out.println(a>>>1);
// 0
// : 0000000101
// : 0000000010 2
:
2
1
0
0
5
1
2
負数を右に移動:
// , 1
// , ,
int a = -5;
// :100000101
// :111111010 ( )
// :111111011 1
System.out.println(a>>1);
// :111111011
// : 111111101 -3
System.out.println(a>>2);
// :111111011
// : 111111110 -2
System.out.println(a>>3);
// :111111011
// : 111111111 -1
System.out.println(a>>4);
// :111111011
// : 111111111 -1
System.out.println(a>>31);
// :111111011
// 31 : 111111111 -1
System.out.println(a>>32);
//int 32 , , -5
System.out.println(a>>34);
//int 32 , 34 34%32 =2 -2
System.out.println(a>>>1);
// 1;
// :111111011
// 1 :011111101
-3
-2
-1
-1
-1
-5
-2
2147483645
左に移動:
左に移動する記号:<<
符号のない正負の数を左にシフトする記号:<<
左に移動した右側に0を追加
//
int a = 5;
// :00000101
System.out.println(a<<1);
//00001010 10
System.out.println(a<<2);
//00010100 20
System.out.println(a<<31);
// ,
:
10
20
-2147483648
負の数を左に移動:
左に移動すると右に0が加算されます
int a = -5;
// :11111011
System.out.println(a<<1);
// :11110110 -10
System.out.println(a<<2);
// :11101100 -20
System.out.println(a<<31);
// 31
System.out.println(a<<34);
//
// :11101100 -20
:
-10
-20
-2147483648
-20
シフトを使用してバイナリを求める問題:
public static void main(String[] args) {
//
int a = 100;
for(int i =31;i>0;i--){
System.out.print(a>>i&1);
}
}
:
0000000000000000000000000110010