# 비트 논리곱(&) 연산자

# A B    A&B
# 0 0    0
# 0 1    0
# 1 0    0
# 1 1    1      >>> 0011 => 3  / 0101 => 5
5 & 3  ##결과 : 1

 

# 비트 논리합(|) 연산자

# A B    A&B
# 0 0    0
# 0 1    1
# 1 0    1
# 1 1    1
3 | 5  ## 7

 

# 비트 배타적 논리합(^) 연산자

# A B    A&B
# 0 0    0
# 0 1    1
# 1 0    1
# 1 1    0     >>> 두 값이 같으면 0, 다르면 1
5 ^ 3 ## 6

 

# 왼쪽 시프트(<<) 연산자

# 00011010 = 26
# 01101000 = 104  앞의 두 비트(00)는 사라짐. 뒤의 두 비트는 0으로 채움.
# 왼쪽으로 시프트할 때마다 2^n을 곱한 효과가 나타남.
ex = 10
expr = f"{ex << 1} {ex << 2} {ex << 3} {ex << 4}"
print(expr)

 

# 오른쪽 시프트(>>) 연산자

# 00011010 = 26
# 00000110 = 6   앞의 두 비트는 부호 비트(0)으로 채우고 뒤의 두 비트는 사라짐.
# 오른쪽으로 시프트할 때마다 2^n으로 나눈 효과
# 시프트 연산은 정수만 연산하므로 몫만 남음. (26/2^2 = 6)
ex2 = 10
expr2 = f"{ex >> 1} {ex >> 2} {ex >> 3} {ex >> 4}" 
print(expr2)

 

# 보수(~) 연산자

# 두 수에 대해 연산하는 것이 아니라, 각 비트를 반대로 만드는 연산자

# 1의 보수
# 0 >> 1 
# 1 >> 0
# 0111 1000 >> (1의 보수) = 1000 0111
a = 12345
~a   # -12346


# 2의 보수
# 1의 보수 + 1 = 2의 보수
# 0111 1000 >> 2의 보수
# = 1의 보수 + 1
# = 1000 0111 + 1
# = 1000 1000
a = 12345
~a + 1 # -12345

'프로그래밍 > Python' 카테고리의 다른 글

Python 문자열 정렬, set  (0) 2023.10.08
Python zip, enumerate 함수 사용  (2) 2023.10.08
파이썬 매개변수 기본값 설정  (0) 2023.10.06
Anaconda 기반의 Python 개발환경 구축  (0) 2023.04.25
파이썬 (~while)  (0) 2023.04.25

+ Recent posts