몰입하며 나아가는 개발이란

Language/Java

[bit] operator([비트] 연산자)

류하을 2019. 11. 30. 19:23

비트(bit)는 간단하게 2진수로 두가지 상태를 표현한다.

즉, 0과 1로 표기를 하게된다.

 

bit : 0, 1

Java에서 bit 연산자는 다음과 같다.


& AND
| OR
^ XOR
<< left shift
>> right shift
~ NOT

 

비트연산자는 총 6개가 있으며,

다음은 코드로 작성된 연산 예제이다.

		// AND 연산 예제)
		int num;
		num = 0xD3 & 0xF0;
		System.out.println("num = " + num);
		System.out.printf("0x%x ", num);
		
		// console result // 
		/* 
		 * num = 208
		 * 0xd0
		 */ 
		
		// Commentary //
		/*	
		 * 8421 8421 // 16진법 자리수 계산법
		 * 
		 * 1101 0011 // 0xD3
		 * 1111 0000 // 0xF0
		 * 
		 * 1101 0000 = 0xd0
		 */
		// OR 연산 예제)
		int num;
		num = 0xD3 | 0xF0;
		System.out.println("num = " + num);
		System.out.printf("0x%x", num);
		
		// console result // 
		/*
		 * num = 243
		 * 0xf3
		 */
		
		// Commentary //
		/*
		 * 8421 8421
		 * 
		 * 1101 0011
		 * 1111 0000
		 * 
		 * 1111 0011 =	0xf3
		 */
		// XOR 연산 예제)
		int num;
		num = 0xD3 ^ 0xF0;
		System.out.println("num = " + num);
		System.out.printf("0x%x", num);
        
		// console result // 
		/*
		 * num = 35
		 * 0x23
		 */
		
		// Commentary //
		/*
		 * 8421 8421
		 * 
		 * 1101 0011
		 * 1111 0000
		 * 
		 * 0010 0011 = 0x23
		 */
         
		num = num ^ 0xF0;
		System.out.println("num = " + num);
		System.out.printf("0x%x", num);	
        
		// console result // 
		/*
		 * 0xd3
		 */
		
		// Commentary //
		/*
		 * 8421 8421
		 * 
		 * 0010 0011
		 * 1111 0000
		 * 
		 * 1101 0011 = 0xd3
		 */
        	 // XOR 연산은 같은 연산을 한번더 하게 되면 원래 숫자로 되돌아온다.
		// ~ 반전 연산 예제)	0 -> 1 	1 -> 0
		byte by;
		by = ~0x55;		
		System.out.println("by = " + by);
		System.out.printf("0x%x \n", by);
        
		// console result // 
		/*
		 * by = -86
		 * 0xaa
		 */
		
		// Commentary //
		/*
		 * 8421 8421
		 * 
		 * 0101 0101
		 * 1010 1010
		 * 
		 * 1010 1010	AA
		 */
		// 모든 0과 1이 뒤집히기 때문에 부호를 나타내는 맨앞의 0과 1도 바뀌므로,
 	   	// 예상하지 못한 결과가 나올 수 있으므로 주의하자.
		// left shift 연산 예제)
		int bit;
		bit = 0x1 << 2;		
		System.out.println("bit = " + bit);
        
		// console result // 
		/*
		 * bit = 4
		 */
		
		// Commentary //
		/*
		 * simple result : *2
		 * 
		 * 0001	-> 1
		 * 0010	-> 2
		 * 0100	-> 4	
		 */
		// 간단하게 <<1당 곱하기 2를 한 값이 나오게 된다.
		// right shift 연산 예제)
		int bit;
		bit = 0x4;	
		bit = bit >> 1;		
		System.out.println("bit = " + bit);
        
		// console result // 
		/*
		 * bit = 2
		 */
		
		// Commentary //
		/*
		 * simple result : /2
		 * 
		 * 0100	-> 4
		 * 0010	-> 2
		 * 0001	-> 4	
		 */
		// left shift와 반대로 >>1당 나누기2 한 값 으로 나오게 되며, 0보다 작아지지 않는다.