JAva取反-右シフト-左シフト-符号なし右シフトの検討


  :
		        ,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