본문 바로가기
TIL - 프로그래밍/개념, 설정

[Python] 비트 연산

by chaemj97 2022. 3. 23.
728x90
  • bit : 정보를 구분할 수 있는 최소 단위 (8bit = 1byte)
  • byte : 메모리에서 위치를 구분할 수 있는 최소 단위
  • 비트 연산자 (같은 자리 비트끼리)
    • & : 비트 단위로 AND 연산을 한다. (특정 비트를 0으로 만들 때, 비트 검사)
    • | : 비트 단위로 OR 연산을 한다. (특정 비트를 1로 만들 때)
    • ^ : 비트 단위로 XOR 연산을 한다. (같으면 0, 다르면 1) (특정 비트가 같은지, 비트 토글(반전시키기))
    • ~ : 단항 연산자로서 피연산자의 모든 비트를 반전시킨다. 
    • << : 피연산자의 비트 열을 왼쪽으로 이동 ( ex) num<<2  == num*=2^2)
      (a |=1<<3 : a의 3번 비트를 1로 만들기)
      (a &=~(1<<3) : a의 3번 비트를 0으로 만들기)
    • >> : 피연산자의 비트 열을 오른쪽으로 이동
    • 1<<n
      • 2^n의 값을 갖는다.
      • 원소가 n개일 경우의 모든 부분집합의 수를 의미
    • i&(1<<j) : i의 j번째 비트가 1인지 아닌지 의미

  • 2진법
def Bbit_print(i):
    output = ""
    for j in range(7,-1,-1):
        output += '1' if i & (1<<j) else '0'
    print(output)
for i in range(-5,6):
    print('%3d = ' % i, end='')
    Bbit_print(i)

코드실행결과

  • 16진법 -> 2진법
# 16진수 1자리 = 2진수 4자리
def Bbit_print(i):
    output = ""
    for j in range(7,-1,-1):
        output += '1' if i & (1<<j) else '0'
    print(output,end=' ')
    
a = 0x10 # 16진수
print('%d = ' % a,end=' ')
Bbit_print(a)
print()

x = 0x01020304
print('0%X = ' % x, end=' ')
for i in range(0,4):
    # oxff : 255 : 11111111(2)
    Bbit_print((x>>i*8) & 0xff)

코드 실행 결과


  • 엔디안(Endianness)
    • 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 의미하며 HW 아키텍처마다 다르다
    • 주의
      • 속도 향상을 위해 바이트 단위와 워드 단위를 변환하여 연산 할 때 올바로 이해하지 않으면 오류를 발생 시킬 수 있다.
    • 크게 2가지
      • 빅 엔디안(Big-endian)
        • 보통 큰 단위가 앞에 나옴, 네트워크
      • 리틀 엔디안(Little-endian)
        • 작은 단위가 앞에 나옴, 대다수 데스크탑 컴퓨터
# 엔디안 확인 코드

import sys
print(sys.byteorder)

코드실행결과

 

728x90
반응형

'TIL - 프로그래밍 > 개념, 설정' 카테고리의 다른 글

[Python] 재귀로 순열, 조합  (0) 2022.03.28
[Python] 반복과 재귀  (0) 2022.03.26
[Python] 2진수, 8진수, 16진수  (0) 2022.03.22
[Python] 복잡도 분석, 표준 입출력 방법  (0) 2022.03.20
[Python] BFS  (0) 2022.03.18

댓글