국민-Learn logo 국민-Learn

참고 소스 : kookmin-learn/bit-calculate.py

비트란

비트는 0과 1을 나타낼 수 있는 가장 작은 데이터 단위이다. 음, 2진수로도 생각할 수 있는데 예를 들어서 4를 이진수로 나타내면 0100으로 나타 낼 수 있다.

  2^3 (8) 2^2 (4) 2^1(2) 2^0(1)  
2진수(bit) 0 1 0 0  
10진수 0 4 0 0 합 :4

0(2^3),1(2^2),0(2^1),(2^0)을 다 더하면 4가 된다. 10진수를 2진수로 바꾸는 방법은 옆에 링크를 참조하면 될듯 하다. 링크 : 10진수를 2진수로 바꾸는 방법

바이트

비트는 2가지 정보밖에 알 수 없기에 매우 작은 단위이다. 그래서 보통 비트 8개를 모아서 사용하는데, 0000 0000 이렇게 총 8개의 비트를 한 묶음으로 사용한다. 이 8개의 비트의 묶음을 1byte 라고 한다.

바이트 1byte 2byte 3byte 4byte
비트 8bit 16bit 32bit 64bit

비트 연산자

먼저a = 60, b = 13 라고 하자 그럼 a와 b는 아래처럼 2진수로 바꿀 수 있다. 여기서부터 하나하나 배워보자

a = 0011 1100
b = 0000 1101

& 연산자

AND 연산. a와 b 둘다 1일때만 참(1)

a&b 0 0 0 0 1 1 0 0
b 0 0 0 0 1 1 0 1
a 0 0 1 1 1 1 0 0

| 연산자

OR 연산. a 와 b 둘중 하나라도 1이라면 참(1)

ab 0 0 1 1 1 1 0 1
b 0 0 0 0 1 1 0 1
a 0 0 1 1 1 1 0 0

^ 연산자

XOR 연산. a 와 b 중 하나만 1일때 참(1), 둘다 1이면 참 x

a^b 0 0 1 1 0 0 0 1
b 0 0 0 0 1 1 0 1
a 0 0 1 1 1 1 0 0

~ 연산자

보수 연산. 보수는 0과 1을 바꿔보면 된다.

~a 1 1 0 0 0 0 1 1
a 0 0 1 1 1 1 0 0
~b 1 1 1 1 0 0 1 0
b 0 0 0 0 1 1 0 1

<< 연산자

쉬프트 연산. 컨베이어 벨트처럼, 비트를 왼쪽으로 n번 밀면됩니다.

a<<1 0 1 1 1 1 0 0 0
a 0 0 1 1 1 1 0 0

| b<<2 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | | —- | — | — | — | — | — | | b | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 이때 결과값은 (피연산자) * (2의 n승)이 된다.

또한 제일 왼쪽에 있는 비트가 <<밀려서 밖으로 밀려나는 현상을 Overflow 라고 한다.

>>연산자

쉬프트 연산. 위 와같은 종류의 연산자로써 이 연산자는 비트를 오른쪽으로 n번 밀면됩니다.

a>>1 0 0 0 1 1 1 1 0
a 0 0 1 1 1 1 0 0
b>>2 0 0 0 0 0 0 1 1
b 0 0 0 0 1 1 0 1

이때 결과값은 (피연산자) * (1/2 의 n승)이 된다.

또한 제일 오른쪽에 있는 비트가 >>밀려서 밖으로 밀려나는 현상을 Underflow 라고 한다.

마스크(Mask) 연산

마스크 연산은 특정 위치에 있는 비트의 값을 알기위한 연산입니다.

| a | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | | —- | — | — | — | — | — | | 1 & a>>(2-1) | 0 | 1 & (M >> N-1) 으로 마스크 연산을 한다면 M의 N번째 비트의 값이 무엇인지 알 수 있습니다.