[4주차] 진법 변환과 비트연산
<진법 변환>
- 진법 : 수를 셀 때 자릿수가 올라가는 단위를 기준으로 하는 셈법의 총칭으로 사용하는 숫자의 개수가 진법의 숫자를 의미함
- 진법 사용하는 이유 : CPU는 2진법 사용함
- bin(10진수) : 10진수를 2진수으로 변환해주는 함수
- oct(10진수) : 10진수를 8진수로 변환해주는 함수
- hex(10진수) : 10진수를 16진수로 변환해주는 함수(16진수에서는 10은 a, 11은 b, ... , 15는 f로 사용)
그 외의 진법들은 직접 구현해서 써야 함
- int(값) : 값을 10진수로 변환해주는 함수
<비트연산>
- 비트연산 : 한 개 혹은 두 개의 이진수에 적용되는 연산
- 비트연산의 종류
1) & (AND) : 각각의 자릿수를 비교하여 둘 다 1일 경우 1, 아니면 0을 반환
a | b | return |
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
ex 0b1101
0b1011
---------------
0b1001
2) | (OR) : 각각의 자릿수를 비교하여 둘 중 하나가 1일 경우 1, 아니면 0을 반환
a | b | return |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
ex 0b1101
0b1011
---------------
0b1111
3) ^(XOR) : 각각의 자릿수를 비교하여 다르면 1, 같으면 0을 반환
a | b | return |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
ex 0b1101
0b1011
---------------
0b0110
4) ~(NOT) : 비트 반전 연산자로 1은 0으로 0은 1로 변환
기존의 값에 1을 더한 뒤 부호를 바꾸면 쉬움
a | returns |
bin(~0b0000) | -0b0001 |
bin(~0b0001) | -0b0010 |
bin(~0b0101) | -0b0110 |
bin(~0b0110) | -0b1010 |
- 2진수의 음수
2진수 | 10진수 |
0b0011 | 3 |
0b0010 | 2 |
0b0001 | 1 |
0b0000 | 0 |
0b1111 | -1 |
0b1110 | -2 |
0b1101 | -3 |
0b1100 | -4 |
bin(~0b1101) → -3 → -0b0011
5) <<, >> (SHIFT) : 비트 이동 연산자
- << : 왼쪽으로 주어진 수만큼 옮김
a | return |
bin(0b11 << 3) | 0b11000 |
bin(0b1100 << 2) | 0b110000 |
- >> : 오른쪽으로 주어진 수만큼 옮김
a | return |
bin(0b11 >> 1) | 0b1 |
bin(0b1100 >> 2) | 0b11 |
- 비트연산과 10진법
: 35 | 5 → 100011 | 101 → 100111 → 39
- 비트연산 활용
1) 컴퓨터 연산을 위한 비트 필드
2) 데이터의 압축 및 암호화
3) 유한 상태 기계
4) 컴퓨터 통신을 위한 포트 및 소켓