비트(bit)는 이진수를 뜻하는 ‘Binary Digit’의 약자로, 컴퓨터에서 CPU가 처리하는 데이터의 최소 단위 크기를 의미한다.
1비트는 0과 1을,
2비트는 00, 01, 10, 11 등 4개의 데이터를 처리할 수 있다.
추가로 데이터의 단위는 아래와 같다.
약칭 | 큰 단위 | 작은 단위 |
---|---|---|
byte | 1 byte | 8 bits |
KB | 1 kilobyte | 1024 bytes |
MB | 1 megabyte | 1024 kilobyte |
GB | 1 gigabyte | 1024 megabyte |
TB | 1 terabyte | 1024 gigabyte |
정확히는 bitwise연산이라고 한다.
비트에 대한 값을 연산하는 부분으로 이진수에 대한 데이터를 연산처리 한다.
간단한 표다.
기능 | 비트 연산자 | 설명 |
---|---|---|
AND | & | 대응되는 비트가 모두 1이면 1을 반환함. |
OR | | | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. |
XOR | ^ | 대응되는 비트가 서로 다르면 1을 반환함. |
NOT | ~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. |
left shift | << | 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴. |
right shift | >> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. |
위의 항목들을 예시를 들며 설명하면이렇다.
& 연산 기호를 사용하며 대응하는 비트가 모두 1일 때 1을 반환한다.
1011 & 1001 = 1001
| 연산 기호를 사용하며 대응하는 비트 중 하나라도 1이면 1을 반환한다.
1011 | 1001 = 1011
^ 연산 기호를 사용하며 대응하는 비트가 같지 않을 때 1을 반환한다.
1011 ^ 1001 = 0010
~ 연산 기호를 사용하며 비트를 반전한 값을 반환한다.
~1011 = 0100
비트를 옮기는 연산으로
왼쪽으로 비트를 옮길 경우 << 연산 기호를 사용하고
오른쯕으로 옮길 경우 >> 연산 기호를 사용한다.
001011 << 2 = 101100
001011 >> 2 = 000010
출처링크
위의 비트연산을 통해 문제를 해결해 나가는 기술을 비트마스크 라고 한다고한다.(처음들어봄)
10개의 스위치가 있다고 가정하고, 이 10개의 스위치의 상태를 표현 하고 싶다.
당연히 스위치는 on/off 만 존재 할 것이다. 이를 list
형태로 표현하면.
switch_states = [True, False, False, True, True, False, False, False, True, True]
하지만, 이는 2진수의 숫자 로도 표현 할 수 있지 않을까요?
switch_states = 1001100011
이렇게 정수형으로 나타내면 장점이 다양합니다.