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가 나와야하는 것 아닌가?라고 생각할 수 있다
'dev > python' 카테고리의 다른 글
[python] 문자열 포매팅 (0) | 2022.02.06 |
---|---|
[python] 기본 연산자(5) - 맴버 연산자, 식별 연산자 (0) | 2022.02.06 |
[python] 기본 연산자(3) - 할당 연산자 (0) | 2022.02.04 |
[python] 기본 연산자(2) - 비교 연산자 (0) | 2022.02.04 |
[python] 자료형 - 문자열(4) - upper(),lower(),replace(),split() (0) | 2022.02.04 |