변위 연산 자

6473 단어 연산 자
package com.lgf.operation;

/**
 *        (  char     )        。
 *             ,      。Java   2   (two’s complement )
 *          ,                     (  1  0, 0  1),       1。
 *   ,-42     42            ,  00101010     11010101 ,    1,  11010110 , -42 。
 *         ,          ,   1。
 *   -42, 11010110     00101001 , 41,   1,      42。 
 * @author lgf
 *
 */
public class BitwiseOperators {
	public static void main(String[] args) {
		bitwiseNot();
		bitwiseAnd();
		bitwiseOr();
		bitwiseXOR();
		leftShiftOperator();
		rightShiftOperator();
		rightUnsignedShiftOperator();
	}
	
	/**
	 * ~    (NOT)(    )
	 *        ,     NOT“~”            。
	 */
	public static void bitwiseNot(){
		int x = 42;		// x = 00000000000000000000000000101010
		int y = ~x;		// y = 11111111111111111111111111010101  = -43
		
		 x = -42;		// x = 11111111111111111111111111010110
		 y = ~x;		// y = 00000000000000000000000000101001  = 41
	}
	
	/**
	 * &    (AND)   
	 *       “&”,         1,    1。     ,     。
	 */
	public static void bitwiseAnd(){
		int x = 44;		// 	x = 0101100 
		int y = 99;		//	y =	1100011
		int z = x & y;	//	z = 0100000  = 1 * 2^5 = 32
		
		x = - 44;		//	x = 11111111111111111111111111010100
		y = 99;			//	y = 00000000000000000000000001100011
		z = x & y;		//	z = 00000000000000000000000001000000 = 1 * 2^6 = 64  
	}
	
	/**
	 * |   (OR)   
	 *       “|”,        1,    1
	 */
	public static void bitwiseOr(){
		int x = 44;		// 	x = 0101100 
		int y = 99;		//	y =	1100011
		int z = x | y;	//	z = 1101111  = 111
		
		x = - 44;		//	x = 11111111111111111111111111010100
		y = 99;			//	y = 00000000000000000000000001100011
		z = x | y;		//	z = 11111111111111111111111111110111 = -9  
	}
	
	
	/**
	 * ^     (XOR)   
	 *        " ^ ",
	 *          1,    1。
	 *      ,     。
	 */
	public static void bitwiseXOR(){
		int x = 44;		// 	x = 0101100 
		int y = 99;		//	y =	1100011
		int z = x ^ y;	//	z = 1001111  = 79
		
		x = - 44;		//	x = 11111111111111111111111111010100
		y = 99;			//	y = 00000000000000000000000001100011
		z = x ^ y;		//	z = 11111111111111111111111110110111 = -73
	}
	
	/**
	 * 	     <<                。
	 *           : value << num   
	 * 	num       value      。   ,     <<           num 。
	 * 	      ,       (    ),  0    。
	 * 	            int    ,   1    31          ;
	 * 	        long    ,   1    63          。 
	 * 
	 * 	  byte  short           ,     。
	 * 	     Java         ,            int  ,
	 * 	  ,       int  。 byte  short              int  ,
	 * 	         31 ,             。
	 * 	  ,        byte   short          ,     int   ,        。
	 * 	  ,           1  。  ,         ,            。
	 * 	                byte  。           : 
	 */
	public static void leftShiftOperator(){
		int x = 11;			//	x = 1011
		int y = x << 3;		//	y = 1011000
		
		x = -11;		//x = 11111111111111111111111111110101
		y = x << 3;		//y = 11111111111111111111111110101000	
		byte i = 64;		//	i = 001000000	64
		int j = i << 2;		//	j = 100000000	256
		byte z = (byte)(i << 2);	//	z = 00000000   0
		
		int num = 0xFFFFFFE;  	// num = 00001111111111111111111111111110
					//i = 0  num=00011111111111111111111111111100   536870908
		for(i=0; i<5; i++) { 	//i = 1  num = 00111111111111111111111111111000   1073741816
			num = num << 1;  	//i = 2  num = 01111111111111111111111111110000   2147483632
			//printBinary(num);	//i = 3  num = 11111111111111111111111111100000   -32
		}				//	i = 4  num = 11111111111111111111111111000000   -64
		

		num = -0xFFFFFFE;  		//		   num = 11110000000000000000000000000010   -268435454
								//	i = 0  num = 11100000000000000000000000000100   -536870908
		for(i=0; i<5; i++) { 	//	i = 1  num = 11000000000000000000000000001000   -1073741816
			num = num << 1;  	//	i = 2  num = 10000000000000000000000000010000   -2147483632
			//printBinary(num);	//	i = 3  num = 00000000000000000000000000100000   32
		}				//	i = 4  num = 00000000000000000000000001000000   64
	}
	
	/**
	 *      >>                。
	 *           : value >> num   ,
	 * num       value      。
	 *    ,     >>           num 
	 * 
	 *    ,       (     )           。
	 *   ,          ,          1,
	 *           ,          0,
	 *         (     )(sign extension ),                 
	 */
	public static void rightShiftOperator(){
		int x = 35;			//	x = 100011		35
		int y = x >> 2;		//	y = 1000		8
		
		x = 32;				//	x = 100000
		y = x >> 2;			//	y = 1000		8
		
		x = -32;			//	x = 11111111111111111111111111100000	-32
		y = x >> 2;			//	y = 11111111111111111111111111111000	-8
			
		x = -1;				//	x = 11111111111111111111111111111111
		y = x >> 2;			//	y = 11111111111111111111111111111111
	}
	
	/**
	 * 	        >>>
	 * 	           ,           (   ) 0。
	 * 	             (unsigned shift )。
	 * 	       Java          >>> ,       0。 
	 */
	public static void rightUnsignedShiftOperator(){
		int x = 35;			//	x = 100011		35
		int y = x >>> 2;		//	y = 1000		8
		
		x = 32;				//	x = 100000
		y = x >>> 2;			//	y = 1000		8
		
		x = -32;			//	x = 11111111111111111111111111100000	-32
		y = x >>> 2;		//	y = 00111111111111111111111111111000	1073741816
		
		x = -1;				//	x = 11111111111111111111111111111111
		y = x >>> 2;		//	y = 00111111111111111111111111111111	1073741823
		printBinary(y);
	}
	
	public static void printBinary(int i){
		System.out.println("   " + i + "        : " + Integer.toBinaryString(i) + "   :" + Integer.toBinaryString(i).length() + "  ");
	}
}

좋은 웹페이지 즐겨찾기