코딩테스트/자료구조

[4주차] 진법 변환과 비트연산

_JAEJAE_ 2021. 8. 22. 21:12

<진법 변환>

- 진법 : 수를 셀 때 자릿수가 올라가는 단위를 기준으로 하는 셈법의 총칭으로 사용하는 숫자의 개수가 진법의 숫자를 의미함

 

- 진법 사용하는 이유 : 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) 컴퓨터 통신을 위한 포트 및 소켓