진법변환/비트연산
진법변환
진법 = 수를 셀 때 자릿수가 올라가는 단위를 기준으로 하는 셈법의 총칭, 사용하는 숫자의 개수가 진법의 숫자를 의미한다.
왜 2진법, 8진법, 16진법이 사용되는지는 컴퓨터과학 이론 공부를 하며 정리했으니 해당 글들을 참고하자.
- “컴퓨팅 사고” https://lucathree.github.io/computer%20science/cs50-1/
- “메모리” https://lucathree.github.io/computer%20science/cs50-5/
### 10진수의 진법변환
bin() # 2진법 변환함수
oct() # 8진법 변환함수
hex() # 16진법 변환함수
각 함수의 아규먼트로 10진수 정수를 입력하면 해당 진법으로 변환하여 값을 반환한다. 이때 반환되는 값은 진법표시가 붙은 string이다.
- 0b - 2진법
- 0o - 8진법
- 0x - 16진법
⇒ 진법표시를 지우고 싶은 경우 [2:]를 붙여주면 된다.
다른 진법은 잘 안쓰이기 때문에 내장함수 구축이 되어있지 않다.
### 10진수로의 진법변환
2진수, 8진수, 16진수를 10진수로 변환하고 싶은 경우 int() 함수를 사용하면 된다.
# 진법표시를 붙여서 입력하는 경우
int(0b10) >>> 2
int(0b11111111) >>> 255
int(0o10) >>> 8
int(0o377) >>> 255
int(0x10) >>> 16
int(0xFF) >>> 255
# 진법표시 없이 입력할 경우 (다른 2,8,16 외 다른 진법 변환도 가능)
int('11111111', 2) >>> 255
int('377', 8) >>> 255
int('FF', 16) >>> 255
### 진법변환하여 출력하기
print() 함수를 사용하여 출력할 때 문자열 포맷팅을 사용하여 변환된 값을 출력할 수 있다.
print('%x'%255) >> ff
print(f'{0xFF}') >> 255
## 비트연산
논리연산 (True, False)과 비슷하지만 이것을 이진수 0과 1로 한다고 생각하면 된다.
-
& (and) : 값이 모두 1일 때만 1 반환
-
| (or) : 값이 0 또는 1일 때 1 반환
-
^ (xor) : 값이 0 또는 1일 때만 1 반환 (모두 0이거나 모두 1이면 0 반환)
-
- ~ (not)
-
반전 연산. 1은 0으로, 0은 1로 변환.
- 2진수의 음수표현을 위해 사용, 반전된 값은 음수가 된다!
- 양수 값을 반환 받기 위해서는 1을 더한 뒤 부호를 바꿔주어야 한다.
-
- «, » (shift 연산자)
-
비트이동 연산자.
-
« x 비트를 왼쪽으로 x만큼 옮김
-
>> x 비트를 오른쪽으로 x만큼 옮김
### 비트연산 활용 영역
- 컴퓨터 연산을 위한 비트 필드
- 데이터의 압축 및 암호화
- 유한 상태 키계
- 컴퓨터 통신을 위한 포트 및 소켓
댓글남기기