프로그래밍 기술/안드로이드

[안드로이드] 19. Java - 비트 연산

언제나휴일 2016. 4. 16. 19:55
반응형

비트 연산


비트 연산은 비트 단위로 논리 연산을 수행하는 연산입니다.
 
비트 연산에는 비트 논리곱(&), 비트 논리합(|), 비트 상호 배제(^), 비트 부정(~) 있습니다.
특정 자리의 비트가 1이면 참으로 취급하고 0이면 거짓으로 취급합니다.
 
비트 논리곱(&) 비트 단위로 논리곱 연산을 합니다.
예를 들어 6&5 하면 6 이진수로 110, 5 이진수로 101 이므로 6&5 연산 결과는 이진수 100 10진수 4입니다.
 
비트 논리합(|) 비트 단위로 논리합 연산을 합니다.
예를 들어 6|5 연산 결과는 이진수 111 10진수 7입니다.
 
비트 상호 배제(^) 둘이 같은 값이면 거짓이고 다른 값이면 참입니다.
예를 들어 6^5 연산 결과는 이진수 011 10진수 3입니다.
 
비트 부정(~) 단항 연산으로 0 자리는 1 1 자리는 0으로 바꿉니다.
1 보수를 취한 값입니다.
예를 들어 ~6 수행하면 6 이진수로 000...110으로 1 보수를 취하면 111...001입니다.
이는 2 보수 표기 방식에 의해 10진수 -7 의미합니다.
 
private static void exBitLogical() {
    System.out.println("6&5 :"+(6&5));
    System.out.println("6|5 :"+(6|5));
    System.out.println("6^5 :"+(6^5));
    System.out.println("~6 :"+(~6));       
}

실행 결과
6&5 :4
6|5 :7
6^5 :3
~6 :-7
 
 
참고로 어떤 수에 같은 수로 ^ 연산을 하면 원래 수가 되는 특징이 있어 간단한 보안에 사용할 있습니다.
이처럼 같은 키로 암호화와 복호화[1] 사용하는 것을 대칭형 암호화라 합니다.
 
private static void exExclusive() {
    int original = 0x12345678; //원본 데이터
    int cryptograph = 0;  //암호화 데이터
    int decrypt = 0;        //복화화 데이터
    int key = 0x394A38C9;       //암호화와 복호화에 사용할
    System.out.println("원본 데이터: "+original);
    cryptograph = original ^ key; //암호화
    System.out.println("암호화 데이터: "+cryptograph);
    decrypt = cryptograph ^ key; //복호화
    System.out.println("복호화 데이터: "+decrypt);       
}

실행 결과
원본 데이터: 305419896
암호화 데이터: 729706161
복호화 데이터: 305419896


[1] 복호화란 암호화 상태의 데이터를 원래 데이터로 바꾸는 과정을 말합니다.

 

반응형