본문 바로가기

python

<누구나 쉽게 배우는 파이썬> 연산자

반응형

 

이번 글에서는 사칙연산과 같은 연산을 하는 연산자에 대해 알아보도록 합시다. 

연산자는 연산을 수행하는 기호를 의미하고 피연산자는 연산이 되는 데이터를 의미합니다.

연산자의 종류에는 산술연산자, 대입연산자, 비트연산자, 논리연산자 등이 있으며 파이썬에서는 같은 연산자라고 하더라도 피연산자들의 자료형에 따라서 결과의 자료형과 값이 달라지기 때문에 이를 주의해서 볼 필요가 있습니다. 

또한 연산자의 우선순위에 대해서도 알아보도록 하겠습니다.

산술연산자

+ -  *

우리가 잘 알고 있는 뺄셈 곱셈 연산입니다. 무슨 일을 하는지는 모두가 알테니 자료형별로 결과를 알아보겠습니다.

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 조건부 표현식
반응형