operators | Description |
---|---|
Arithmetic operators | +, -, *, /, %, //, ** |
Relational(Comparison) operators | >, <, ==, !=, >=, <= |
Logical(Boolean) operators | and, or, not |
Assignment operators | =, +=, -=, *=, /=, %=, //=, **=, &=, |=, ^=, >>=, <<= |
Bitwise operators | &, |, ~, ^, >>, << |
Special operators - Identity operators | is, is not |
Special operators - Membership operators | in, not in |
Arithmetic Operators
a + b
: 더하기
a - b
: 빼기
a * b
: 곱하기
a / b
: 나누기
a // b
: a/b의 몫
a % b
: a/b의 나머지
a ** n
≡ a^n
= a의 n제곱
** 연산자는 오른쪽에서 왼쪽으로 계산됨
12 * 2 ** 3 ** 2 = = = 6,144
a ** (1 / 2) ≡
Relational(Comparison) Operators
a == b
: a와 b는 같다.a != b
: a와 b는 같지 않다.x > y
: x는 y보다 크다.x >= y
: x는 y보다 크거나 같다.x < y
: x는 y보다 작다.x <= y
: x는 y보다 작거나 같다.실수 값의 비교
2진법 체계 하에서 실수는 정확한 값으로 표현되지 않을 수 있다. 따라서 실수 연산 값을 단순히 ==으로 비교하면 원하지 않은 결과가 발생할 수 있다.
예컨대 100을 다양한 방식으로 표현해보자. 이다. 그렇다면 0.1은 2진법으로 어떻게 표현할까? 이다. 즉 0011이 계속 반복된다. 따라서 2진법으로 소수를 정확하게 표현할 수 없고, 근사치를 사용할 수 밖에 없다.0.1 + 0.1 + 0.1 == 0.3 # False
Logical Operators
a and b
≡ a & b
: a와 b 모두 참이어야 Truea or b
≡ a | b
: a또는 b 둘 중 하나가 참이면 Truenot a
≡ !a
: a가 참이면 False, 거짓이면 True(True or False) & False
⇒ False
Assignment Operator
=
: 왼쪽에는 반드시 변수가 와야 함.a ?= b ≡ a = a ? b (? = [+, -, /, *, %…])
a += b
≡ a = a + b
a *= b
≡ a = a * b
unary operator
Bitwise Operators
0b1111 & 0b0100 # 0b0100
0b1111 | 0b0100 # 0b1111
0b1111 ^ 0b0100 # 0b1011
0b0100 >> 2 # 0b0001
0b0100 << 1 # 0b1000
파이썬에선 2의 보수(two's complement)를 사용한다. 즉 1의 보수와 차이가 존재한다.
우선 보수를 사용하는 이유는 2진법 체계 하에서 뺄셈을 하기 위해서이다. 예를들어 2 - 2는 2진법으로 0b0010 + 0b1010로 표현된다. 이 때 -2를 4bits로 표현할 때 0b1010이 되는 이유는, 2진법 체계 하에서 부호를 나타내는 방법이 맨 왼쪽(첫 번재) bit를 +일 때 0, -일 때 1로 표현하기 때문이다.보수
n진법의 보수에서는 n-1의 보수와 n의 보수가 존재한다. 1의 보수(one's complement)는 n진법의 각 자리수마다 가장 큰 수(n-1)에서 해당 자리수의 값을 뺀 결과이다. 한편 2의 보수(two's complement)는 1의 보수에 + 1을 한 값이다.2의 보수(two's complement)
2진법에서 음수를 표현할 때 각 자리의 숫자를 반전하고(0 -> 1, 1 -> 0) 1을 더한다.
예를들어 1byte일 때 127은0 111 1111
이다. 따라서 127 - 127 = 127 + (-127)로 표현할 수 있다. 그리고 결과값은 0이다. 즉0 111 1111 + 1 xxx xxxx = 0 000 0000
이 되어야 한다.
Del 0 1 1 1 1 1 1 1 + 1 x x x x x x x = 0 0 0 0 0 0 0 0 그런데 1의 보수는 모든 자리수를 1로 만들어 주는 수이다. 그리고 모든 자리수가 1이면 -1을 의미한다. 따라서 -1 + 1을 하게 되면 0이 된다.
그러므로 2의 보수는 1의 보수에서 1을 더해 표현하게 된다. 즉 -127은 0 111 1111을 반전한 1 000 0000에서, 1을 더해 1 000 0001로 표현한다.
Del 0 1 1 1 1 1 1 1 + 1 0 0 0 0 0 0 0 = 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 1 = 1 0 0 0 0 0 0 0 0
한편, 8bit의 공간에 2진법으로 음수와 양수를 표현하면 -128 ~ 127의 값을 표현할 수 있다.
Decimal value Two’s-complement Representation(1byte) 127 0 111 1111 126 0 111 1110 125 0 111 1101 124 0 111 1100 … … 4 0 000 0100 3 0 000 0011 2 0 000 0010 1 0 000 0001 0 0 000 0000 -1 1 111 1111 -2 1 111 1110 -3 1 111 1101 -4 1 111 1100 … … -126 1 000 0010 -127 1 000 0001 -128 1 000 0000
Ternary operators
[true_value] if [condition] else [false_value]
Operators Precedence
연산자는 ** → *, /, //, % → +, -
순서로, 동일 순위 연산자 내에서는 왼쪽에서 오른쪽으로 계산한다. 따라서 계산의 편의성 및 명확성을 위해서 괄호로 묶어 표현하는 것이 바람직하다.
Operator | Description |
---|---|
(), {}, [] | Tuple, Set, List, Dictionary |
collection[index] collection[index1, index2] function(aguments ...) object.attribute | 컬렉션의 첨자 슬라이싱 함수의 인수 객체의 속성 등 |
** | Exponentiation (raise to the power) 제곱 |
~, +, - | Complement, unary plus and minus (method names for the last two are +@ and -@) 보수 연산자, 단항 연산자 |
*, /, %, // | Multiply, divide, modulo and floor division 곱하기, 나누기, 몫, 나머지 |
+, - | Addition and subtraction 덧셈과 뺄셈 |
>>, << | Right and left bitwise shift Shift 연산자 |
& | Bitwise 'AND' 비트연산자 AND |
^ | Bitwise exclusive 'OR' 비트연산자 XOR |
| | Bitwise 'OR' 비트연산자 OR |
in, not in, is, is not, <, <=, >, >=, !=, == | Comparison operators, equality operators, membership and identity operators 비교 연산자, 동등 연산자, 관계 연산자, 종속 연산자 |
not | Boolean 'NOT' 논리 연산자 NOT |
and | Boolean 'AND' 논리 연산자 AND |
or | Boolean 'OR' 논리 연산자 OR |
=, %=, /=, //=, -=. +=. *=, **= | Assignment operators 할당 연산자 |
if else | Ternary operators 삼항 연산자 |
lambda |