zenn.skin 무료버전 배포중!
자세히보기

Python/Syntax

[Python] 논리 연산자와 Bitwise 연산자 차이점

koosco! 2022. 3. 16. 22:44

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'의 다른글

  • 현재글 [Python] 논리 연산자와 Bitwise 연산자 차이점

관련글