# 비트 논리곱(&) 연산자
# 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 |