본문 바로가기

dev/python

[python] 기본 연산자(4) - 논리 연산자, 비트 연산자

[python] 기본 연산자(1) - 산술 연산자

[python] 기본 연산자(2) - 비교 연산자

[python] 기본 연산자(3) - 할당 연산자


Logical Operators

 

논리 연산자를 쉽게 이해하기 위해서 대출을 받는 상황을 상상해보자

 

SMS 인증, 공동인증서인증, ARS인증 중에 하나만 인증하면

다른 인증방식을 전부 만족하지 않아도 인증이 완료가 된다

이건 논리 연산자 중 or의 연산방식을 따른다

 

하지만 계약서의 서명과 체크는

모두 다 완료해야 다음 과정으로 넘어갈 수 있다

이건 논리 연산자 중 and의 연산방식을 따른다

 

또한 내 대출 결격사유가 없어야 한다!

이건 논리 연산자 중 not의 연산방식을 따른다

 

각각의 연산방식은 다음과 같은 과정을 따른다

Operator Description Example
and 둘 다 참일 때만 참 ( True and False ) = False
or 둘 중 하나만 참이여도 참 ( True or False ) = True
not 논리 상태를 반전함 not ( Flase or False ) = True

아래 코드의 변수값을 True 혹은 False로 바꿔보면서 논리 연산자에 따라 결과값이 어떻게 달라지는지 확인해보자

 


Bitwise Operators

 

비트 연산자..비트코인이 생각나는 이름이다

 

논리연산자와 비슷하지만 이건 비트 단위로 연산할 때 사용한다

 

더보기
더보기

Bit 란?

 

Binary Digit의 약어로 정보를 취급하는 단어 중 제일 작은 단위다

 

이진법으로 1부터 10까지의 수를 표현하면 다음과 같은데

 

10진법 1 2 3 4 5 6 7 8 9 10
2진법 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
Bit 1Bit 2Bit 2Bit 3Bit 3Bit 3Bit 3Bit 4Bit 4Bit 4Bit

위처럼 2진법의 자리수가 비트값과 동일하다고 보면 된다

4비트 메모리는 0000(0)부터 1111(15)까지 2의 4제곱개의 숫자 즉 16개의 숫자를 표현할 수 있다

 

a=bin(8)
print(a)

# 결과:0b1000

위처럼 8을 이진수로 프린트하면
이진수를 뜻하는 0b가 앞에 붙고 그 뒤에 이진수로 표현한 8이 붙는 형식으로 프린트된다

그럼 비트 단위로 연산한다는건 무슨 뜻일까??? 몰?루

 

이진수로 표현한 9와 10을 비트 단위로 끊어서 연산한다는 뜻이다

예를 들어 비트 연산자에서 &은 논리연산자 and와 같은 방식인데

9의 이진수 형태 1 0 0 1
10의 이진수 형태 1 0 1 0
&로 연산 1 0 0 0

위처럼 비트단위로 데이터를 끊어서 둘 다 1이면 1을 반환하고 둘 중 하나라도 1이 아니라면 0을 반환한다

9&10은 8이라는 결과가 나온다

 

비트연산자에는 다음과 같은 종류가 있다

Operator Description Example
& 둘 다 참일 때 만족 1100 & 1010 == 1000
| 둘 중 하나만 참이어도 만족 1100 | 1010 == 1110
^ 둘 중 하나만 참일 때 만족 1100 ^ 1010 == 110
~ 보수 연산 0은 1로 1은 0으로 치환 ~110011 == 1100
<< 변수의 값을 왼쪽으로 지정된 비트 수 만큼 이동 1100<<2 == 110000
>> 변수의 값을 오른쪽으로 지정된 비트 수 만큼 이동 1100>>2 == 11

역시 직접 해보지 않고서는 알 수가 없다

 

 

여기서 보수 연산이 좀 의아한 값이 나오는데

1010을 뒤집으면 0101이니까 5가 나와야하는 것 아닌가?라고 생각할 수 있다

왜 ~10이 11이 되는가...보수연산이 무엇인가....궁금하면 눌러보자