2. 기본 자료형의 연산 Last updated: 2023-10-17 10:28:54
이 장에서 정수, 실수, 문자열 등 기본 형에 대한 연산 사용 법과 결과에 대해 좀더 자세히 알아보도록 한다.
이 장에서 정수, 실수, 문자열 등 기본 형에 대한 연산 사용 법과 결과에 대해 좀더 자세히 알아보도록 한다.
파이썬에서 덧셈은 가장 기본적인 연산으로 정수와 실수의 숫자형 데이터의 값을 더해준다. 우선 정수의 덧셈 예시를 살펴보자.
[예제 3- 50] 정수의 덧셈 연산하기
a = 10 # 정수
b = 20 # 정수
a + b
[결과]
30
정수와 정수의 덧셈 결과는 정수이다.
덧셈 연산 중에 하나의 값이라도 실수형이 포함되어 있으면 결과는 실수가 된다.
[예제 3- 51] 정수와 실수의 덧셈 연산하기
a = 10.0 # 실수
b = 20 # 정수
a + b
[결과]
30.0
정수와 실수의 덧셈 결과는 실수이다.
문자열 간의 덧셈 연산은 문자열을 이어준다.
[예제 3- 52] 문자열의 덧셈 연산하기
a = 'Good'
b = 'Morning'
a + b
[결과]
'GoodMorning'
문자열과 문자열을 더하면 공백 없이 문자열이 연결된 문자열이다.
하지만, 문자열과 숫자형을 함께 덧셈 연산 할 수는 없다. 정수형(int)와 문자열(str)을 덧셈 연산하면 다음과 같이 형식 오류(Type Error)가 발생된다.
[예제 3- 53] 문자열과 정수의 덧셈 연산하기
a = 10
b = 'Times'
a + b
[결과]
TypeError: unsupported operand type(s) for +: 'int' and 'str'
문자열과 정수 혹은 실수는 덧셈 연산을 할 수 없으므로 오류가 발생한다.
파이썬에서 뺄셈은 가장 기본적인 연산으로 정수와 실수의 숫자형 데이터의 값의 빼기 연산을 수행한다. 우선 정수형 데이터 간에 뺄셈 연산을 확인해보자.
정수와 정수의 뺄셈 예제이다.
[예제 3- 54] 정수와 정수의 뺄셈 연산하기
a = 20
b = 10
a - b
[결과]
10
정수와 정수의 뺄셈 결과는 정수이다.
덧셈 연산 중에 하나의 값이라도 실수형이 포함되어 있으면 결과는 실수이다.
[예제 3- 55] 정수와 정수의 뺄셈 연산하기
a = 20.0 # 실수
b = 10 # 정수
a – b
[결과]
10.0
실수와 정수의 뺄셈 연산 결과는 실수이다.
뺄셈 연산은 문자열에 대해서는 지원하지 않는다. 만일 문자열을 이용해 뺄셈 연산을 하면 다음과 같이 형식 오류(Type Error)가 발생된다.
[예제 3- 56] 문자열의 뺄셈 연산하기
a = 'Good'
b = 'Morning'
a - b
[결과]
TypeError: unsupported operand type(s) for -: 'str' and 'str'
정수간의 곱셈 연산 결과는 정수이다.
[예제 3- 57] 정수의 곱셈 연산하기
a = 16 # 정수
b = 32 # 정수
a * b
[결과]
512
정수의 곱셈 연산 결과는 정수이다.
실수가 포함된 숫자형의 곱셈 결과는 실수이다.
[예제 3- 58] 정수와 실수의 곱셈 연산하기
a = 16.0 # 실수
b = 32 # 정수
a * b
[결과]
512.0 # 결과는 실수
정수의 실수의 곱셈 연산 결과는 실수이다.
문자열에 숫자를 곱하면 문자열을 반복하여 연결한 문자열을 반환한다. 단 숫자형은 정수만 가능하고 실수형은 지원하지 않는다.
[예제 3- 59] 문자열과 정수의 곱셈 연산하기
a = '*#'
b = 10
a * b
[결과]
'*#*#*#*#*#*#*#*#*#*#'
문자열에 정수를 곱하면 문자열이 정수만큼 반복되어 연결되 생성된다. 당연히 정수는 양수만 가능하다.
[예제 3- 60] 정수와 문자열의 곱셈 연산하기
# 숫자와 문자의 순서를 뒤바꿔도 결과는 같다.
a = 10
b = '*#'
a * b
[결과]
'*#*#*#*#*#*#*#*#*#*#'
나눗셈 연산 결과는 실수이다. 정수와 정수, 정수와 실수를 나누더라도 값은 실수형이 된다.
[예제 3- 61] 정수의 나눗셈 연산하기
# [1] 정수 / 정수 => 실수
100 / 10
[결과]
10.0
[예제 3- 62] 실수와 실수의 나눗셈 연산하기
# [2] 실수 / 정수 => 실수
100.0 / 10
[결과]
10.0
[예제 3- 63] 정수와 실수의 나눗셈 연산하기
# [2] 정수 / 실수 => 실수
100 / 10.0
[결과]
10.0
위의 예제에서 알 수 있듯이 숫자형의 나눗셈 연산 결과는 실수이다.
몫과 나머지 연산에 대해 알아보자.
몫을 계산할 때는 이중 역슬레시(//)를 사용한다. 몫은 정수끼리의 계산에서 결과는 정수형이지만, 실수가 포함되어 있으면 결과도 실수이다.
[예제 3- 64] 정수의 몫 연산하기
11 // 4
[결과]
2
10을 4로 나누면 몫은 2이고, 정수와 정수의 연산 결과는 정수이다.
[예제 3- 65] 정수와 실수의 몫 연산하기
11 // 4.0
[결과]
2.0
실수가 포함된 값의 몫 결과는 실수이다.
나머지 연산에 사용하는 기호는 퍼센트(%)이다. 이는 대부분의 언어에서 사용하는 연산자와 같다.
[예제 3- 66] 정수와 정수의 나머지 연산하기
11 % 4
[결과]
3
정수와 정수의 나머지 연산의 결과는 정수이다.
[예제 3- 67] 정수와 실수의 나머지 연산하기
11 % 4.0
[결과]
3.0
실수형이 포함된 연산의 나머지 연산 결과는 실수이다.
divmod( ) 함수를 구하면 몫과 나머지를 한번에 구할 수 있다. 계산된 결과는 (몫, 나머지)의 tuple 형식으로 반환된다.
[예제 3- 68] 몫과 나머지 연산하기
divmod(11, 4)
[결과]
(2, 3)
11을 4로 나누어 몫과 나머지를 계산하면 몫은 2이고 나머지는 3이다. 결과는 튜플 형식으로 반환된다.
[예제 3- 69] 정수와 실수의 몫과 나머지 연산하기
divmod(11, 4.0)
[결과]
(2.0, 3.0)
정수 11을 실수 4로 나눈 몫은 2.0이고 나머지는 3.0으로 결과는 실수의 튜플 형식이다.
파이썬에서 제곱을 위한 연산자는 이중 곱셈(**)이다. ** 기호 뒤의 숫자는 ** 앞의 숫자를 제곱 하라는 의미이다.
[예제 3- 70] 정수의 제곱 연산하기
4 ** 2
[결과]
16
4의 2제곱 연산 결과는 정수 16이다.
[예제 3- 71] 정수의 세제곱 연산하기
4 ** 3
[결과]
64
4의 3제곱 연산 결과는 정수 64이다.
파이썬은 비트 단위 연산을 위한 다양한 연산자를 제공한다. 다음은 비트 AND와 비트 OR 연산 예제이다. AND 연산을 위한 연산자는 앰퍼센트(&)이고 OR 연산을 위한 연산자는 세로줄(‘|’)이다.
[예제 3- 72] 정수의 비트 AND 연산하기
215 & 157
[결과]
149
정수 215와 157의 비트 AND 연산 결과는 149이고 이진수로 표시하면 10010101이다.
[예제 3- 73] 정수의 비트 OR 연산하기
215 | 157
[결과]
223
십진수 215와 157의 비트 OR 연산 결과는 223이고 이진수로 표시하면 11011111이다.
다음은 파이썬에서 지원하는 비트 연산자들이다.
[표 4] 비트 연산자의 종류
연산자 | 기능 | 설명 |
---|---|---|
a & b | 비트 AND | a와 b의 비트 AND 연산 |
a | b | 비트 OR | a와 b의 비트 OR 연산 |
a ^ b | 비트 XOR | a와 b의 비트 XOR 연산 |
~a | 비트 NOT | a의 비트 NOT 연산 (주의) 파이썬에서 비트에 NOT(~)을 붙이면 2의 보수 값을 반환한다. |
a << b | 비트 LEFT-SHIFT | a의 값을 b만큼 왼쪽으로 자리이동 시킴 |
a >> b | 비트 RIGHT-SHIFT | a의 값을 b만큼 오른으로 자리이동 시킴 |
a &= b | 비트 AND & Assign | a와 b의 값을 비트 AND 연산 후 결과를 a에 저장 |
a |= b | 비트 OR & Assign | a와 b의 값을 비트 OR 연산 후 결과를 a에 저장 |
a ^= b | 비트 XOR and Assign | a와 b의 값을 비트 XOR 연산 후 결과를 a에 저장 |
a <<= b | 비트 Left-SHIFT & Assign | a의 값을 b만큼 왼쪽으로 자리이동 후 결과를 a에 저장 |
a >>= b | 비트 Right-Shift & Assign | a의 값을 b만큼 오른쪽으로 자리이동 후 결과를 a에 저장 |
AND 연산은 두 비트가 동시에 참이 성립하는지 묻는 연산이다. 같은 자리에 두 비트가 모두 1 이면 결과도 1이고, 하나라도 0이 있다면 0이다.
[그림 3-2-1] 비트 AND 연산
OR 연산은 두 비트 중에서 하나라도 참이 성립하는지 묻는 연산이다. 같은 자리의 두 비트 중에 하나라도 1이라면 결과는 1이고 둘 다 0이라면 결과는 0이다.
[그림 3-2-2] 비트 OR 연산
XOR 연산은 베타연산이다. 두 비트중에 하나만 1이고 나머지가 0이면 결과는 0이고, 두 비트 모두 0이나 1인 경우 결과는 1이다.
[그림 3-2-3] 비트 XOR 연산
좌측으로 1bit 자리 이동 하면 우측 끝 민 자리에 0이 추가된다. 2진수 이므로 2를 곱한것과 같다.
[그림 3-2-4] 비트 좌측 Shift 연산
우측으로 1bit 자리 이동하면 우측 끝의 1비트가 제거되고, 2로 나눈 몫이 남는다.
[그림 3-2-5] 비트 우측 Shift 연산