비트 연산자와 2의 보수
비트 연산자
-
비트 연산과 비트
- 비트 연산은 이진수, 비트 문자열, 비트 배열에서 쓰이는 연산입니다. 비트 문자열 비트 배열은 비트를 저장하는 해당 데이터 구조를 일컫습니다. 비트의 위치는 오른쪽부터 시작해, 왼쪽으로 셉니다. 16비트에서, 이진수 0001은 가장 오른쪽 비트를 제외한 모든 위치에 0이 있습니다.
-
비트 연산의 특징
- 비트 연산자는 정수형을 피연산자로 가지고, 각 자리 수에 대한 연산은 해당 자리에서만 영향을 미칩니다.
-
비트 연산/알고리즘의 장점
- 속도
비트 연산은 프로세서에서 동작하는 까닭에, 산술 연산보다 더욱 빠릅니다.
- 공간 최적화
비트 연산은 한 변수 안에 다양한 값을 저장할 수 있기에 메모리 제한이 있을 때 유용합니다.
- 비트 조작
비트 연산자는 개별 비트를 조작할 수 있기에, 암호, 오류 탐지, 압축 분야에서 유용합니다.
- 코드 간결화
비트 연산은 복잡한 조건문과 반복문을 줄일 수 있기에, 코드를 간결하게 만듭니다.
- 가독성 개선
복잡한 논리를 한 연산으로 표현할 수 있기에, 코드를 이해하고 유지하기 더 쉽습니다.
-
비트 연산/알고리즘의 단점
- 복잡성
이진수 표현과 비트 연산에 익숙하지 않은 사람들에게는, 이해하고 구현하기에 힘들 수도 있습니다.
- 이식성
비트 연산은 다른 시스템으로는 잘 이식되지 않을 수 있습니다. 특히 기계 수준에서 이진 데이터를 처리하고 있을 경우에는 더욱 그렇습니다.
- 유지
유지와 디버깅이 어렵습니다.
- 수행
빠르고 유용할 수 있지만, 항상 최고의 선택은 아닙니다.
-
비트 연산자
-
논리 연산자
연산자 | 설명 |
---|
& | 대응 되는 비트가 모두 1이면 1을 반환한다 (AND) |
| | 대응 되는 비트 중에서 하나라도 1이면 1을 반환한다 (OR) |
^ | 대응 되는 비트가 서로 다르면 1을 반환한다 (XOR) |
~ | 비트가 1이면 0으로, 0이면 1로 반전시킨다 (NOT) |
-
이동 연산자
연산자 | 설명 |
---|
<< | 비트값을 주어진 숫자만큼 왼쪽으로 이동시킨 후, 빈자리는 0으로 채운다. (left shift) |
>> | 비트값을 주어진 숫자만큼 오른쪽으로 이동시킨 후, 빈자리는 해당 정수의 최상의 부호 비트와 같은 값으로 채운다 (right shift) |
>>> | 비트 값을 주어진 숫자만큼 오른쪽으로 이동시킨 후 빈 공간을 모두 0으로 채운다. (JAVA) |
-
비트 연산자 진리표
Fig 1. Bitwise Operator Truth Table |
---|
 |
-
비트 연산자의 쓰임 추측
- & (AND): 일치하는 값을 추출해내는 것에 쓸 수 있겠습니다.
- | (OR): 해당하는 비트를 0으로 교체하거나 치환할 때 쓸 수 있겠습니다.
- ^ (XOR): 한 피연산자 값에서 다른 피연산자 값으로 변했다면, 어떤 변화가 있었는지 알 수 있습니다.
- ~ (NOT) : 2의 보수를 구하는 데 이용할 수 있습니다.
2의 보수 (Two's complement)
References
[Fig 1.]
https://www.geeksforgeeks.org/introduction-to-bitwise-algorithms-data-structures-and-algorithms-tutorial/
http://www.tcpschool.com/java/java_operator_bitwise
https://en.m.wikipedia.org/wiki/Two%27s_complement
https://ko.m.wikipedia.org/wiki/2의_보수