이번 글에서는 사칙연산과 같은 연산을 하는 연산자에 대해 알아보도록 합시다.
연산자는 연산을 수행하는 기호를 의미하고 피연산자는 연산이 되는 데이터를 의미합니다.
연산자의 종류에는 산술연산자, 대입연산자, 비트연산자, 논리연산자 등이 있으며 파이썬에서는 같은 연산자라고 하더라도 피연산자들의 자료형에 따라서 결과의 자료형과 값이 달라지기 때문에 이를 주의해서 볼 필요가 있습니다.
또한 연산자의 우선순위에 대해서도 알아보도록 하겠습니다.
산술연산자
+ - *
우리가 잘 알고 있는 뺄셈 곱셈 연산입니다. 무슨 일을 하는지는 모두가 알테니 자료형별로 결과를 알아보겠습니다.
int , int -> int
int , float -> float
float , float -> float
a = 1 #int
b = 2 #int
c = 2.2 #float
d = 3.3 #float
print(type(a+b)) #int
print(type(a+c)) #float
print(type(c+d)) #float
위와 같이 모두 int 변수만 연산 한다면 int가 되지만 float가 하나 이상 포함된다면 float가 됨을 알 수 있습니다.
**
곱셈 연산자를 두번 사용하면 거듭제곱 연산자가 됩니다. 2 ** 4 는 2의 4제곱 입니다. 피연산자 자료형별 결과 자료형은 +-*연산자 들과 같습니다.
print(2**4) #16
+
추가로 문자열도 덧셈 연산자를 이용하여 더할 수 있습니다. (다른 산술 연산자는 안됩니다.)
str + str -> str
a = "hello "
b = "world!!"
print(a+b) #hello world!!
print(type(a+b)) #str
두 문자열을 더하면 위와 같이 두 문자열이 이어 붙여진 문자열이 됩니다.
/
나누기 연산자 입니다. 다른 사칙연산들과 다르게 나누기 연산은 조금 특별합니다.
모든 정수가 나누어 떨어지지 않기 때문에 int 변수를 int 변수로 나누어도 float 형이 됩니다.
a = 1 #int
b = 3 #int
print(a/b) #0.3333333333333333
print(type(a/b)) #float
print(b/a) #3.0
print(type(b/a)) #float
//
나누기 연산자를 두개를 쓰면 몫을 구하는 연산자가 됩니다. 몫은 항상 정수이기 때문에 값은 정수이지만 자료형은 +-*연사자들처럼 아래와 같이 나옵니다.
int , int -> int
int , float -> float
float , float -> float
a = 1 #int
b = 2 #int
c = 2.2 #float
d = 3.3 #float
print(b//a) #2
print(type(b//a)) #int
print(c//a) #2.0
print(type(c//a)) #float
print(d//c) #1.0
print(type(d//c)) #float
%
수학에서는 퍼센트를 나타내는 기호이지만 파이썬에서는 나머지를 계산하는 연산자 입니다. 나머지 연산도 // 연산처럼 모두 int 변수만 연산 한다면 int가 되지만 float가 하나 이상 포함된다면 float가 됩니다.
a = 1 #int
b = 2 #int
c = 2.2 #float
d = 3.3 #float
print(b%a) #0
print(type(b%a)) #int
print(c%b) #0.20000000000000018
print(type(c%a)) #float
print(d%c) #1.0999999999999996
print(type(d%c)) #float
결과에서 볼 수 있듯이 컴퓨터는 소수의 값을 정확하게 저장할 수 없기 때문에 소수의 나눗셈에서는 값이 정확하지 않게 나온다는 것을 알 수 있습니다.
대입연산자
=
수학에서는 등호라고 부르고 양변에 있는 값이 같다는 것을 의미하는 기호입니다. 하지만 파이썬에서는 변수에 값을 대입 할 때 사용하는 연산자로 좌측의 피연산자 값을 우측의 값으로 대입하는 연산자입니다.
a = 1
비교연산자
비교연산자는 양 변의 값을 비교하는 연산자이며 결과는 true와 false로 나오게 됩니다. 값을 비교하는 연산자 이므로 문자열은 비교할 수 없습니다.
==
수학에서의 등호와 같은 역할을 하는 연산자로 양 쪽의 값이 같은지를 판별합니다.
같으면 true 다르면 false가 반환됩니다.
!=
!표는 아니다를 의미하며 위 연산자는 같지 않다를 의미합니다. 같지 않다면 true 같다면 false가 반환됩니다.
>, <
수학에서의 부등호와 같은 역할을 하는 연산자입니다. 한 값이 다른 한 값의 미만인지 혹은 초과인지를 판단합니다.
>= , <=
수학에서의 부등호≤, ≥와 같은 역할을 하는 연산자입니다. 한 값이 다른 한 값의 이하인지 혹은 이상인지를 판단합니다.
논리연산자
두개의 논리값(True와 False) 을 연산하여 True나 False를 결과로 얻는 연산자입니다.
and
논리 연산자로 양 쪽이 모두 True일 때만 True입니다.
결과 | |
True and True | True |
True and False | False |
False and True | False |
False and False | False |
or
논리 합 연산자로 둘 중 하나 이상이 True라면 True입니다.
결과 | |
True or True | True |
True or False | True |
False or True | True |
False or False | False |
not
True는 False로 False 는 True로 바꿔줍니다.
not True -> False
not False -> True
비트연산자
비트의 단위에서 논리연산을 하는 연산자입니다.
&
논리 연산자에서 and와 같다. 비트곱 연산자라고 부른다. 0과 곱하면 0이 되는 것 처럼 둘다 1 이여야 결과도 1입니다.
172를 이진수로 표현하면 10101100, 38을 이진수로 표현하면 100110, 두 수의 비트합을 구하면 아래와 같이 100100으로 36이 나옵니다.
print(bin(172)) #0b10101100
print(bin(38)) #0b00100110
print(172 & 38) #36
|
논리 연산자에서 or와 같다. 비트합 연산자라고 부른다. 하나 이상 1이면 결과도 1입니다.
172를 이진수로 표현하면 10101100, 38을 이진수로 표현하면 100110, 두 수의 비트곱을 구하면 아래와 같이 10101110으로 174가 나옵니다.
print(bin(172)) #0b10101100
print(bin(38)) #0b100110
print(172 | 38) #174
~
논리연산자 not과 같으며 모든 비트를 1을 0으로 0을 1로 반전 시켜줍니다.
~1을 하게 되면 11111111 11111111 11111111 11111110 이 되고 이는 2의 보수법을 사용하는 int형에서 -2를 나타냅니다.
print(~1)
^
xor 또는 배타적 비트합라고 부른다. 두 비트가 서로 다르면 1이고 같다면 0입니다.
172를 이진수로 표현하면 10101100, 38을 이진수로 표현하면 100110, 두 수의 배타적비트을 구하면 아래와 같이10001010으로 138가 나옵니다.
print(bin(172)) #0b10101100
print(bin(38)) #0b100110
print(172 ^ 38) #138
>> , <<
비트 쉬프트 연산자라고 하며 왼쪽 피연산자의 비트를 오른쪽 피연산자 만큼 화살표 방향으로 이동시키는 연산을 합니다. 이때 범위 밖으로 넘어가는 비트들은 무시합니다.
1 << 2 라고 하면 0001이 0100이 되어 값이 4가 됩니다. 2 >> 3 이라고 하면 0010에서 1이 밀려서 왼쪽끝을 넘어가기 때문에 0이 됩니다.
print(1 << 2) #4
print(2 << 4) #32
print(4 >> 1) #2
print(1290849374 >> 32) #0 (넘어간 비트 무시)
연산자 우선순위
수학에서 덧셈 뺄셈보다 곱셈 나눗셈을 먼저하는 것처럼 파이썬의 연산자에도 우선순위가 있습니다. 연산자 우선순위는 다음과 같습니다.
연산자 | 설명 |
** | 거듭제곱 |
+x, -x, ~x | 단항 덧셈(양의 부호), 단항 뺄셈(음의 부호), 비트 NOT |
*, @, /, //, % | 곱셈, 행렬 곱셈, 나눗셈, 버림 나눗셈, 나머지 |
+, - | 덧셈, 뺄셈 |
<<, >> | 비트 시프트 |
& | 비트 AND |
^ | 비트 XOR |
| | 비트 OR |
<, <=, >, >=, !=, == | 비교 연산자 |
not x | 논리 NOT |
and | 논리 AND |
or | 논리 OR |
if else | 조건부 표현식 |
'python' 카테고리의 다른 글
<누구나 쉽게 배우는 파이썬> 변수의 형변환 (0) | 2022.06.13 |
---|---|
<누구나 쉽게 배우는 파이썬> 자료형 (0) | 2022.06.11 |
<누구나 쉽게 배우는 파이썬> 파이썬 설치하기 (0) | 2022.05.27 |
<누구나 쉽게 배우는 파이썬> 자료의 저장 변수 (0) | 2022.05.27 |
<누구나 쉽게 배우는 파이썬> 변수 이름 짓는 법 (0) | 2022.05.27 |