1.  비트열 반전 연산자 (~)

 


public class Test021
{
	public static void main(String[] args)
	{
		int a = 10, b = -10;
		
		System.out.printf("~a : %d\n", ~a);
		System.out.printf("~b : %d\n", ~b);
	}
}

// 실행 결과
/*
~a : -11
~b : 9                              
계속하려면 아무 키나 누르십시오 . . .  
*/

 

 


2. AND, OR, XOR 연산자 (&, |, ^)

 

public class Test022
{
	public static void main(String[] args)
	{
		int a = 13, b = 7;
		int c, d, e;

		c = a & b;	// 비트 AND
		d = a | b;	// 비트 OR
		e = a ^ b;	// 비트 XOR

		System.out.printf("a & b : %d\n",c);
		System.out.printf("a | b : %d\n",d);
		System.out.printf("a ^ b : %d\n",e);
	}
}

// 실행 결과

/*
a & b : 5
a | b : 15
a ^ b : 10
계속하려면 아무 키나 누르십시오 . . .
*/

 

 


3. 시프트 연산(<<, >>, <<<, >>>)

 

왼쪽 시프트연산을 한번 수행하면 2배가 되고 오른쪽으로 시프트연산을 한번 수행하면 1/2배가 된다.

 

public class Test024
{
	public static void main(String[] args)
	{
							//							  |
		int x = 128;		// 00000000 00000000 00000000 10000000
		 
		System.out.printf("x << 3 : %d\n", x << 3);	// 00000000 00000000 00000100 00000000
		System.out.printf("x * 8  : %d\n", x * 8);		
												 //                                  |
		System.out.printf("x >> 3 : %d\n", x >> 3); // 00000000 00000000 00000000 00010000
		System.out.printf("x / 8  : %d\n", x / 8);
		System.out.printf("x << 24 : %d\n", x << 24);
		//--==>> x << 24 : -2147483648
		// |
		// 10000000 00000000 00000000 00000000

	}
}

4. 두 수의 교환

 

일반적인 두 변수의 자리 바꿈은 temp와 같은 임시저장을 위한 변수를 만들어 이를 이용해 두 변수를 교환한다.

 


public class Test023
{
	public static void main(String[] args)
	{
		// ○ 일반적인 두 변수(a, b)의 자리 바꿈
		
		int a=10, b=20; //-- 내용물을 바꾸기 위한 두 정수
		int temp; //-- 임시 저장 변수

		
		// 내용물을 바꾸기 전 확인
		System.out.println("a : " + a + ", b : " + b);
	

		// 연산 및 처리(내용물 바꾸기 → 기본 대입 연산 활용)
		temp = a;
		a = b;
		b = temp;
		
		// 연산 처리 후 결과 확인
		System.out.println("a : " + a + ", b : " + b);
	}
}

 

이를 xor연산을 다음과 같이 수행하면 아래와 같이 간단하게 해결할 수 있다.

 


public class Test023
{
	public static void main(String[] args)
	{
		// ○ 비트 단위 연산자 "XOR" 연산자를 활용하여
		//	  두 변수에 담겨있는 내용(값) 바꾸기

		// 주요 변수 선언 및 초기화
		int x = 20, y = 23;

		// 각 변수에 담긴 내용물 확인
		System.out.printf("x : %d, y : %d\n", x, y);

		// 연산 및 처리
		/*
		x = x ^ y;
		y = y ^ x;
		x = x ^ y;
		*/

		y = y ^ x;
		x = x ^ y;
		y = y ^ x;

		// 연산 처리 후 결과 확인
		System.out.printf("x : %d, y : %d\n",x, y);
	}
}
// 실행 결과
/*
x : 20, y : 23
x : 23, y : 20
*/


 

 

+ Recent posts