진법변환/비트연산

1 분 소요

진법변환

진법 = 수를 셀 때 자릿수가 올라가는 단위를 기준으로 하는 셈법의 총칭, 사용하는 숫자의 개수가 진법의 숫자를 의미한다.

왜 2진법, 8진법, 16진법이 사용되는지는 컴퓨터과학 이론 공부를 하며 정리했으니 해당 글들을 참고하자.

### 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만큼 옮김

### 비트연산 활용 영역

  • 컴퓨터 연산을 위한 비트 필드
  • 데이터의 압축 및 암호화
  • 유한 상태 키계
  • 컴퓨터 통신을 위한 포트 및 소켓

댓글남기기