데이터의 단위와 비트연산

김재섭·2023년 9월 23일
0

비트(bit)는 이진수를 뜻하는 ‘Binary Digit’의 약자로, 컴퓨터에서 CPU가 처리하는 데이터의 최소 단위 크기를 의미한다.

1비트는 0과 1을,
2비트는 00, 01, 10, 11 등 4개의 데이터를 처리할 수 있다.

추가로 데이터의 단위는 아래와 같다.

약칭큰 단위작은 단위
byte1 byte8 bits
KB1 kilobyte1024 bytes
MB1 megabyte1024 kilobyte
GB1 gigabyte1024 megabyte
TB1 terabyte1024 gigabyte

비트연산

정확히는 bitwise연산이라고 한다.
비트에 대한 값을 연산하는 부분으로 이진수에 대한 데이터를 연산처리 한다.

간단한 표다.

기능비트 연산자설명
AND&대응되는 비트가 모두 1이면 1을 반환함.
OR|대응되는 비트 중에서 하나라도 1이면 1을 반환함.
XOR^대응되는 비트가 서로 다르면 1을 반환함.
NOT~비트를 1이면 0으로, 0이면 1로 반전시킴.
left shift<<지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴.
right shift>>부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴.

위의 항목들을 예시를 들며 설명하면이렇다.

And 연산자

& 연산 기호를 사용하며 대응하는 비트가 모두 1일 때 1을 반환한다.

1011 & 1001 = 1001

OR 연산자

| 연산 기호를 사용하며 대응하는 비트 중 하나라도 1이면 1을 반환한다.

1011 | 1001 = 1011

XOR 연산자

^ 연산 기호를 사용하며 대응하는 비트가 같지 않을 때 1을 반환한다.

1011 ^ 1001 = 0010

NOT 연산자

~ 연산 기호를 사용하며 비트를 반전한 값을 반환한다.

~1011 = 0100

SHIFT 연산자

비트를 옮기는 연산으로 
왼쪽으로 비트를 옮길 경우 << 연산 기호를 사용하고 
오른쯕으로 옮길 경우 >> 연산 기호를 사용한다.

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  

이렇게 정수형으로 나타내면 장점이 다양합니다.

  • 비트연산을 통한 삽입, 삭제, 조회 등이 간단해짐
  • 더 간결한 코드 작성이 가능
  • 더 빠른 연산이 가능
  • 비트마스크를 이용한 정수 표현으로 다이나믹 프로그래밍이 가능함. (중요)
profile
Unity C#

0개의 댓글