파이썬 논리연산자 and와 & 결과 차이나는 이유

파이썬 True False 판별해주는 논리 연산자에 대해 알아본다.

and or 연산자

and or 연산자 예시

🔺 and는 둘 개 모두가 True이어야만 결과도 True를 반환한다.

or 연산자

🔺 or는 둘 중 하나만 True이면 결과로 True를 반환한다.

이러한 참거짓 판별 논리연산자 중에서

🔺 오늘 살펴볼 것은 이런 경우인데, 2 and 3을 하면 왜 3이 나오는지? 그리고 and와 &로 했을때 왜 값이 다른지? 이다.

결과값을 정하는 요소

첫번째 질문에 대한 답은 아래 표에 있다.

aband
TTT
TFF
FTF
FFF

🔺 a와 b가 각각 True, False일 때의 결과값을 함께 표시하였다. 이 때 a가 T이면 and의 결과값은 b에 의해서 결정된다. 앞에가 T인건 상관없고 뒤에가 T냐 아니냐로 and의 참거짓이 결정되기 때문이다.

반면에 a에서부터 F가 나오면 b가 무엇이 오든 결과는 그대로 F이다. 즉, a가 T가 왔을때는 b가 and의 결과값이 되는 것이고, a가 F가 오면 a 자체가 and의 결과값이 된다.

숫자의 경우 0이 아니라면 모두 True로 판별하는데, 따라서 2 and 3 이 경우는 2가 True이니까 and의 결과값이 3으로 결정된다. 그래서 결과가 3이 나오는 것이다.

그렇다면 0 and 3을 하면 결과는 뭐가 나올까? 처음이 False 이니까 0이 그대로 나오게 된다.

abor
TTT
TFT
FTT
FFF

🔺 or도 마찬가지이다. or 에서는 둘 중 하나만 T가 나오면 결과가 T이므로, a가 True 일 경우 결과가 그대로 True, a가 False 일 경우 b에 의해 결과값 결정이 된다. 

비트와이즈 연산자

두번째 의문이었던 and와 &의 결과값이 다른 이유는? 답은 and와 &가 애초에 다른 연산자이기 때문이다. 

and는 두 개를 각각 True/False 판별한 후 결과를 연산하는 것이고, &는 각각을 비트로 만든 뒤 계산하는 비트와이즈 (bitwise) 연산자이다. 아예 성격이 다른 기호인 것이다.

비트와이즈 연산자

🔺 and 뿐 아니라 or의 경우도 이렇게 다르게 나타난다.

<bitwise 연산자>

and : &

or : |

not : ~

bitwise 연산자란 비트 단위로 바꿔서 같은 자리수끼리 연산한 후에 다시 십진수로 치환해주는 것을 말한다.

2 & 3 계산

2 : 10

3 : 11

이렇게 2진수로 바꾸고 각 자리수별로 and연산을 하면, 앞자리는 1,1→1, 뒷자리 0,1→0, 합치면 10이 된다. 이걸 다시 십진수로 환산하면 2이다.

or도 마찬가지이다.

2 | 3 계산

2 : 10

3 : 11

이렇게 2진수로 바꾸고 각 자리수별로 or연산을 하면, 앞자리는 1,1→1, 뒷자리 0,1→1, 합치면 11이 된다. 이걸 다시 십진수로 환산하면 3이다.

평점 0 / 5. 참여 : 0

첫번째 평가를 남겨주세요!