- 목차
- 산술, 대입 연산자
- 관계, 논리, 비트 연산자
- 연산자 우선 순위
연산자
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. 연산자 우선순위
코드를 작성하면서 여러가지 연산자를 사용하기 때문에 미리 정의된 연산자의 순위를 아는것이 중요하다
- 괄호가 최우선
- 산술 연산이 비트 연산보다 우선
- 관계 연산이 논리 연산보다 우선