비트 연산
비트 연산은 비트 단위로 논리 연산을 수행하는 연산입니다.
비트 연산에는 비트 논리곱(&), 비트 논리합(|), 비트 상호 배제(^), 비트 부정(~)이 있습니다.
이 때 특정 자리의 비트가 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] 복호화란 암호화 상태의 데이터를 원래 데이터로 바꾸는 과정을 말합니다.
'프로그래밍 기술 > 안드로이드' 카테고리의 다른 글
[안드로이드] 24. Java - 키보드 입력 (0) | 2016.04.16 |
---|---|
[안드로이드] 23. Java - 조건 연산 (0) | 2016.04.16 |
[안드로이드] 22. Java - 증감 연산 (0) | 2016.04.16 |
[안드로이드] 21. Java - 대입 연산 (0) | 2016.04.16 |
[안드로이드] 20. Java - 쉬프트 연산 (0) | 2016.04.16 |
[안드로이드] 18. Java - 논리 연산 (0) | 2016.04.16 |
[안드로이드] 17. Java - 비교 연산 (0) | 2016.04.16 |
[안드로이드] 16. Java - 산술 연산 (0) | 2016.04.16 |
[안드로이드] 15. Java - 연산 개요 (0) | 2016.04.16 |
[안드로이드] 14. Java - 실수형 (0) | 2016.04.16 |