Python을 공부하면서 Bitwise 연산자를 사용할 일이 많지 않아 논리 연산자와의 차이점을 잘 몰랐는데 알고리즘 문제를 풀며 공부할 기회가 생겨 정리를 해보려 한다.
1. 논리 연산자와 bitwise 연산자의 값 비교
1) 홀수인 경우 AND, OR 연산
# AND 연산, & 연산
print(21 and 1) # 1
print(21 and 0) # 0
print(21 & 1) # 1
print(21 & 0) # 0
# OR 연산, | 연산
print(21 or 1) # 21
print(21 or 0) # 21
print(21 | 1) # 21
print(21 | 0) # 21
2) 짝수인 경우 AND, OR 연산
# AND 연산, & 연산
print(20 and 1) # 1
print(20 and 0) # 0
print(20 & 1) # 0
print(20 & 0) # 0
# OR 연산, | 연산
print(20 or 1) # 20
print(20 or 0) # 20
print(20 | 1) # 21
print(20 | 0) # 20
and와 &, or과 | 연산의 결과를 확인하면 조금 차이가 있음을 확인할 수 있다.
이는 두 연산자가 같지 않음을 의미하는데.. 오늘은 두 연산자가 어떤 차이가 있는지 알아보려 한다.
2. 논리 연산자
- 논리 연산자 AND와 OR은 항의 참 / 거짓에 따라 True 또는 False를 반환한다.
- 정수 간에 논리 연산자를 사용하면 정수 값을 반환하게 된다.
- 피연산자가 정수라면 0이라면 False, 0이 아니라면 모두 True로 계산한다
1) AND 연산
- 주어진 피연산자들이 모두 참인 경우 참을 반환한다.
- 앞의 값이 거짓이면 뒤의 값을 확인하지 않고 거짓을 반환한다.
num = int(input())
print(0 and num)
- 위의 연산 결과는 num과 상관없이 무조건 0을 반환한다.
2) OR 연산
- 주어진 피연산자들 중 하나라도 참이면 참을 반환한다.
- 앞의 값이 참이라면 뒤의 값을 확인하지 않고 참을 반환한다. 즉 앞의 값이 참이라면 뒤의 값은 어떤 수가 오든 관심이 없다.
num = int(input()) # num은 0이 아닌 정수
print(num or 1) # num
print(num or 0) # num
print(num or 321321321323) # num
앞의 값이 0이 아닐 때 OR 연산을 하면 그대로 앞의 값을 반환한다.
print(21 or 1) # 21
print(1 or 21) # 1
print(21 or 13) # 21
print(13 or 21) # 13
3. Bitwise 연산자
- Bitwise 연산자도 논리 연산자와 동일하게 AND, OR 연산이 존재한다.
- 하지만 Bitwise 연산자의 목적은 논리 연산자와 다르게 참/거짓을 판단하는 것이 아닌 값을 비트로 바꾼 후 비트 연산을 하는 것이다.
- 피연산자들이 주어지면 두 값을 모두 비트 값으로 바꾼 후 비트 연산을 수행하게 된다.
4. 다시 처음에 주어졌던 식을 확인해보자
# AND 연산, & 연산
print(21 and 1) # 1, 21과 1 모두 참이므로 1 반환(이 때 1은 피연산자 1이 아니라 논리연산자 결과임)
print(21 and 0) # 0, 0은 거짓이므로 0 반환
print(21 & 1) # 1, 21과 1을 bit로 바꾸어 10101 와 00001 의 AND 연산 결과 00001 반환
print(21 & 0) # 0, 10101 과 00000 의 AND 연산 결과 00000 반환
# OR 연산, | 연산
print(21 or 1) # 21, 21이 참이므로 21 반환
print(21 or 0) # 21, 21이 참이므로 21 반환
print(21 | 1) # 21, 10101과 00001 의 OR 연산 결과 10101 반환
print(21 | 0) # 21, 10101과 00000 의 OR 연산 결과 10101 반환
# AND 연산, & 연산
print(20 and 1) # 1, 20과 1 모두 참이므로 1 반환
print(20 and 0) # 0, 0은 거짓이므로 0 반환
print(20 & 1) # 0, 10100과 00001의 AND 연산 결과 00000 반환
print(20 & 0) # 0, 10100과 00000의 AND 연산 결과 00000 반환
# OR 연산, | 연산
print(20 or 1) # 20, 20은 참이므로 20 반환
print(20 or 0) # 20, 20은 참이므로 20 반환
print(20 | 1) # 21, 10100과 00001의 OR 연산 결과 10101 반환
print(20 | 0) # 20, 10100과 00000의 OR 연산 결과 10100 반환
둘의 쓰임이 조금 다르므로 구분해서 사용하면 엉뚱하지 않은 원하는 결과를 얻을 수 있을 것이다 :)
'Python > Syntax' 카테고리의 다른 글
[Pandas] DataFrame 열 순서 변경 (0) | 2022.06.08 |
---|---|
[Python] 문자열 자료형을 datetime, date 자료형으로 변환 (0) | 2022.05.26 |
[Python] Bitwise 연산자를 이용한 홀/짝 판단 (0) | 2022.03.16 |
[Pandas] DataFrame - 2 (행/열 추가, 값 선택/변경, 전치) (1) | 2022.01.10 |
[Pandas] DataFrame - 1 (자료형, 생성, 행/열 이름변경, 행/열 삭제) (0) | 2022.01.10 |