22.03.14 비트연산자

Saparian·2022년 3월 14일
0

오늘의배움

목록 보기
33/53

비트단위로 연산하는 연산자

\ : 'OR' 연산자
& : 'AND' 연산자
^ : 'XOR' 연산자 (두 연산자의 비트가 다를때만 1이 된다.)

public class ch3_OperatorEx28 {
	public static void main(String[] args) {
		int x = 0xAB, y = 0xF;
		
		System.out.printf("x = %#X \t\t%s%n", x, toBinaryString(x));	// %X : 16진수, %#X : 접두사가 붙은 16진수
		System.out.printf("y = %#X \t\t%s%n", y, toBinaryString(y));
		
		// '|' : 'OR' 연산자
		System.out.printf("%#X | %#X = %#X \t%s%n", x, y, x | y, toBinaryString(x|y));
		
		// '&' : 'AND' 연산자
		System.out.printf("%#X & %#X = %#X \t%s%n", x, y, x & y, toBinaryString(x&y));
		
		// '^' : 'XOR' 연산자 (두 연산자의 비트가 다를때만 1이 된다.)
		System.out.printf("%#X ^ %#X = %#X \t%s%n", x, y, x^y, toBinaryString(x^y));
		// 다시 연산하면 원래의 값으로 돌아오는 특징이 있다.
		System.out.printf("%#X ^ %#X ^ %#X = %#X %s%n", x, y, y, x^y^y, toBinaryString(x^y^y));		// x
		System.out.printf("%#X ^ %#X ^ %#X = %#X %s%n", x, y, x, x^y^x, toBinaryString(x^y^x));		// y
	}

	// 아래 매서드는 추후에 이해하기로 한다
	// 10진 정수를 2진수로 변환하는 메서드
	static String toBinaryString(int x) {
		String zero = "00000000000000000000000000000000";
		String tmp = zero + Integer.toBinaryString(x);
		return tmp.substring(tmp.length()-32);
	}

결과값

x = 0XAB 	    	00000000000000000000000010101011
y = 0XF 		    00000000000000000000000000001111
0XAB | 0XF = 0XAF  	00000000000000000000000010101111
0XAB & 0XF = 0XB 	00000000000000000000000000001011
0XAB ^ 0XF = 0XA4 	00000000000000000000000010100100
0XAB ^ 0XF ^ 0XF = 0XAB 00000000000000000000000010101011
0XAB ^ 0XF ^ 0XAB = 0XF 00000000000000000000000000001111

~ : 0은 1로, 1은 0으로 바꾼다.

public static void main(String[] args) {
		byte p = 10;
		byte n = -10;
		
		System.out.printf(" p  =%d \t%s%n",  p,   toBinaryString(p));
		// 1의 보수 관계
		System.out.printf("~p  =%d \t%s%n", ~p,   toBinaryString(~p));
		// 양의정수를 음의 정수로 바꾸고 싶을때
		System.out.printf("~p+1=%d \t%s%n", ~p+1, toBinaryString(~p+1));
		System.out.printf("~~p =%d \t%s%n", ~~p, toBinaryString(~~p));
		System.out.println();
		
		// 음의정수를 양의정수로 바꾸고 싶을때
		System.out.printf(" n  =%d%n", n);
		System.out.printf("~(n-1)=%d%n", ~(n-1));
		
	}	
	
	// 10진 정수를 2진수로 변환하는 메서드
	static String toBinaryString(int x) {
		String zero = "00000000000000000000000000000000";
		String tmp = zero + Integer.toBinaryString(x);
		return tmp.substring(tmp.length()-32);
	}

결과값

 p  =10 	00000000000000000000000000001010
~p  =-11 	11111111111111111111111111110101
~p+1=-10 	11111111111111111111111111110110
~~p =10 	00000000000000000000000000001010

 n  =-10
~(n-1)=10

어떤 방식으로 연산이 이루어지는지는 이해했지만 아직까지 이 연산을 어디다가 써먹어야하는지는 감이 오지를 않는다.

0개의 댓글