[SW Expert Academy / 파이썬 프로그래밍 기초] 5. 연산자
Programming/Python

[SW Expert Academy / 파이썬 프로그래밍 기초] 5. 연산자

  • 목차
    • 산술, 대입 연산자
    • 관계, 논리, 비트 연산자
    • 연산자 우선 순위

 

연산자

3 + 2 = 5

  • 3, 2 : 피연산자
  • + : 연산자
  • 연산자는 피연산자를 원하는 방향으로 움직이게 만든다. 프로그램 로직 구성의 필수요소

 

1. 산술, 대입 연산자

산술 연산자

  • 산술 연산자의 기본동작
>>> a, b = 3, 2
>>> print("{0} + {1} = {2}".format(a, b, a + b))
5
>>> print("{0} - {1} = {2}".format(a, b, a - b))
1
>>> print("{0} * {1} = {2}".format(a, b, a * b))
6
>>> print("{0} / {1} = {2}".format(a, b, a / b))
1.5
>>> print("{0} // {1} = {2}".format(a, b, a // b))
1
>>> print("{0} % {1} = {2}".format(a, b, a % b))
1
>>> print("{0} ** {1} = {2}".format(a, b, a ** b))
9

 

  • 산술 연산자 우선순위+, -연산은 우선순위가 동일하므로 어느것을 먼저 연산해도 결과는 동일함
  • +, -연산은 다른 산술연산자들에 비해 우선순위가 낮음
>>> a, b, c = 2, 3, 5       # 괄호() : 우선순위가 가장 높음
>>> print((a + b) - c)
0
>>> print(a + (b - c))      # 우선순위가 동일한 연산은 괄호로 묶어 먼저 연산해도 결과는 동일함.
0
>>> print(a + (b * c))
17
>>> print((a + b) * c)      # ()에 의해 곱셈과 더하기 연산의 우선순위가 바뀜
25
>>> print(a * (b / c))
1.2

 

  • 문자형과 숫자형 연산
>>> a, b, c = "2", "3", 4
>>> print(a + b)            # 두 개의 문자열을 연결한 새로운 문자열을 만드는 문자열 접합(+) 연산의 결과임
23
>>> print(int(a) + int(b))
5
>>> print(b + c)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    print(b + c)
TypeError: can only concatenate str (not "int") to str

# 문자열 접합(+) 연산은 문자열끼리 할 수 있는 연산이므로 TypeError가 발생함

>>> print(int(b) + c)
7
>>> print(b + str(c))
34

 

대입 연산자

  • 변수 선언
  • 연산 결과를 변수에 저장
  • 함수 반환값을 변수에 저장

 

복합 대입 연산자

>>> a = 10
>>> a += 5; print(a)
15
>>> a -= 5; print(a)
10
>>> a *= 5; print(a)
50
>>> a /= 5; print(a)
10.0
>>> a //= 5; print(a)
2.0
>>> a %= 5; print(a)
2.0
>>> a **= 5; print(a)
32.0

 

2. 관계, 논리, 비트 연산자

관계 연산자

>>> a, b = 3, 2
>>> print(a == b)
False
>>> print(a != b)
True
>>> print(a > b)
True
>>> print(a < b)
False
>>> print(a >= b)
True
>>> print(a <= b)
False
>>> a = 10
>>> 8 < a < 10
False
>>> 8 < a <= 10
True

 

 

논리 연산자

선택의 문제에서 특정 조건을 만족하는지를 검사하기 위한 조건식을 만들 때 사용

  • 부울형 변수 a, b에 대한 논리 연산 결과

  • and의 특징
>>> a = 10
>>> a > 7 and a < 12
True
>>> (a > 7) and (a < 12)
True
>>> 7 < a < 12
True

 

  • or의 특징
>>> gender, age = "male", 20
>>> gender == "female" and age >= 18
False
>>> gender == "female" or age >= 18
True
>>> gender == "female" or age < 18
False

 

  • not의 특징
    관계연산자가 논리연산자보다 우선하고, 논리연산자 not의 우선순위가 and와 or의 우선순위보다 앞서기 때문

    ()를 사용하는 경우 연산자의 우선순위를 강제로 명시함
>>> a = 3
>>> not(a > 7 and a < 12)
True

 

비트 연산자

 

  • 비트 논리곱 & : 양변의 비트 값 모두 1일 경우에만 1을 반환
>>> a, b = 2, 3           # 4비트로 표현시 a = 0010, b = 0011
>>> print(a & b)          # 0010 & 0011 -> 0010 -> 10진정수로 2의 값을 가진다
2

 

  • 비트 논리합 | : 양변의 값 모두 0일 경우에만 0을 반환
>>> print(a | b)          # 0010 | 0011 -> 0011 -> 10진정수로 3의 값을 가진다
3

 

  • 비트 배타적 논리합 ^ : 양변의 값이 다를 경우 1, 같을 경우 0을 반환
>>> print(a ^ b)          # 0010 ^ 0011 -> 0001 -> 10진정수로 1의 값
1

 

  • 비트 부정연산 ~ : 비트 값이 1일 경우 0, 0일 경우 1을 반환
>>> print(~ a)                 # ~ 0010 -> 1101
-3

 

  • 비트 시프트 연산자 >> , << : 비트를 이동
>>> a = 8                         # 0000 1000
>>> print(a >> 1)                 # 0000 1000 >> 1 => 0000 0100
4                
>>> print(a >> 2)                 # 0000 1000 >> 2 -> 0000 0010
2
>>> print(a >> 3)                 # 0000 1000 >> 3 -> 0000 0001
1                 

>> 연산을 수행하면 오른쪽으로 이동할 때마다 정수 값을 반으로 줄이는 결과를 만듦

>>> print(a << 1)                 # 0000 1000 << 1 -> 0001 0000
16
>>> print(a << 2)                 # 0000 1000 << 2 -> 0010 0000
32
>>> print(a << 3)                 # 0000 1000 << 3 -> 0100 0000
64

<< 연산을 수행하면 왼쪽으로 이동할 때마다 정수 값이 두 배가 되는 결과를 만듦

 

3. 연산자 우선순위

코드를 작성하면서 여러가지 연산자를 사용하기 때문에 미리 정의된 연산자의 순위를 아는것이 중요하다

  1. 괄호가 최우선
  2. 산술 연산이 비트 연산보다 우선
  3. 관계 연산이 논리 연산보다 우선