2. 기본 자료형의 연산 Last updated: 2023-10-17 10:28:54

이 장에서 정수, 실수, 문자열 등 기본 형에 대한 연산 사용 법과 결과에 대해 좀더 자세히 알아보도록 한다.

2.1 덧셈 연산 (+)


2.1.1 정수의 덧셈

파이썬에서 덧셈은 가장 기본적인 연산으로 정수와 실수의 숫자형 데이터의 값을 더해준다. 우선 정수의 덧셈 예시를 살펴보자.

[예제 3- 50] 정수의 덧셈 연산하기

a = 10  # 정수
b = 20  # 정수
a + b

[결과]

30

정수와 정수의 덧셈 결과는 정수이다.



2.1.2 실수의 덧셈

덧셈 연산 중에 하나의 값이라도 실수형이 포함되어 있으면 결과는 실수가 된다.

[예제 3- 51] 정수와 실수의 덧셈 연산하기

a = 10.0  # 실수
b = 20   # 정수
a + b

[결과]

30.0

정수와 실수의 덧셈 결과는 실수이다.



2.1.3 문자열의 덧셈

문자열 간의 덧셈 연산은 문자열을 이어준다.

[예제 3- 52] 문자열의 덧셈 연산하기

a = 'Good'
b = 'Morning'
a + b

[결과]

'GoodMorning'

문자열과 문자열을 더하면 공백 없이 문자열이 연결된 문자열이다.



2.1.4 문자열과 숫자형의 덧셈

하지만, 문자열과 숫자형을 함께 덧셈 연산 할 수는 없다. 정수형(int)와 문자열(str)을 덧셈 연산하면 다음과 같이 형식 오류(Type Error)가 발생된다.

[예제 3- 53] 문자열과 정수의 덧셈 연산하기

a = 10
b = 'Times'
a + b

[결과]

TypeError: unsupported operand type(s) for +: 'int' and 'str'

문자열과 정수 혹은 실수는 덧셈 연산을 할 수 없으므로 오류가 발생한다.



2.2 뺄셈 연산 (-)

파이썬에서 뺄셈은 가장 기본적인 연산으로 정수와 실수의 숫자형 데이터의 값의 빼기 연산을 수행한다. 우선 정수형 데이터 간에 뺄셈 연산을 확인해보자.


2.2.1 정수의 뺄셈

정수와 정수의 뺄셈 예제이다.

[예제 3- 54] 정수와 정수의 뺄셈 연산하기

a = 20
b = 10
a - b

[결과]

10

정수와 정수의 뺄셈 결과는 정수이다.



2.2.3 실수의 뺄셈

덧셈 연산 중에 하나의 값이라도 실수형이 포함되어 있으면 결과는 실수이다.

[예제 3- 55] 정수와 정수의 뺄셈 연산하기

a = 20.0  # 실수
b = 10    # 정수
a – b

[결과]

10.0

실수와 정수의 뺄셈 연산 결과는 실수이다.



2.2.4 문자열의 뺄셈

뺄셈 연산은 문자열에 대해서는 지원하지 않는다. 만일 문자열을 이용해 뺄셈 연산을 하면 다음과 같이 형식 오류(Type Error)가 발생된다.

[예제 3- 56] 문자열의 뺄셈 연산하기

a = 'Good'
b = 'Morning'
a - b

[결과]

TypeError: unsupported operand type(s) for -: 'str' and 'str'


2.3 곱셈 연산 (*)


2.3.1 정수의 곱셈

정수간의 곱셈 연산 결과는 정수이다.

[예제 3- 57] 정수의 곱셈 연산하기

a = 16  # 정수
b = 32  # 정수
a * b

[결과]

512

정수의 곱셈 연산 결과는 정수이다.



2.3.2 실수의 곱셈

실수가 포함된 숫자형의 곱셈 결과는 실수이다.

[예제 3- 58] 정수와 실수의 곱셈 연산하기

a = 16.0  # 실수
b = 32    # 정수
a * b

[결과]

512.0  # 결과는 실수

정수의 실수의 곱셈 연산 결과는 실수이다.



2.3.3 문자열의 곱셈

문자열에 숫자를 곱하면 문자열을 반복하여 연결한 문자열을 반환한다. 단 숫자형은 정수만 가능하고 실수형은 지원하지 않는다.

[예제 3- 59] 문자열과 정수의 곱셈 연산하기

a = '*#'
b = 10
a * b

[결과]

'*#*#*#*#*#*#*#*#*#*#'

문자열에 정수를 곱하면 문자열이 정수만큼 반복되어 연결되 생성된다. 당연히 정수는 양수만 가능하다.


[예제 3- 60] 정수와 문자열의 곱셈 연산하기

# 숫자와 문자의 순서를 뒤바꿔도 결과는 같다.
a = 10
b = '*#'
a * b

[결과]

'*#*#*#*#*#*#*#*#*#*#'


2.4 나눗셈 연산 (/)

나눗셈 연산 결과는 실수이다. 정수와 정수, 정수와 실수를 나누더라도 값은 실수형이 된다.

[예제 3- 61] 정수의 나눗셈 연산하기

# [1] 정수 / 정수 => 실수
100 / 10

[결과]

10.0

[예제 3- 62] 실수와 실수의 나눗셈 연산하기

# [2] 실수 / 정수 => 실수
100.0 / 10

[결과]

10.0

[예제 3- 63] 정수와 실수의 나눗셈 연산하기

# [2] 정수 / 실수 => 실수
100 / 10.0

[결과]

10.0

위의 예제에서 알 수 있듯이 숫자형의 나눗셈 연산 결과는 실수이다.



2.5 몫(//)과 나머지(%) 연산

몫과 나머지 연산에 대해 알아보자.


2.5.1 몫 연산

몫을 계산할 때는 이중 역슬레시(//)를 사용한다. 몫은 정수끼리의 계산에서 결과는 정수형이지만, 실수가 포함되어 있으면 결과도 실수이다.

[예제 3- 64] 정수의 몫 연산하기

11 // 4

[결과]

2

10을 4로 나누면 몫은 2이고, 정수와 정수의 연산 결과는 정수이다.


[예제 3- 65] 정수와 실수의 몫 연산하기

11 // 4.0

[결과]

2.0

실수가 포함된 값의 몫 결과는 실수이다.



2.5.2 나머지 연산

나머지 연산에 사용하는 기호는 퍼센트(%)이다. 이는 대부분의 언어에서 사용하는 연산자와 같다.

[예제 3- 66] 정수와 정수의 나머지 연산하기

11 % 4

[결과]

3

정수와 정수의 나머지 연산의 결과는 정수이다.


[예제 3- 67] 정수와 실수의 나머지 연산하기

11 % 4.0

[결과]

3.0

실수형이 포함된 연산의 나머지 연산 결과는 실수이다.



2.5.3 divmod( ) 함수로 몫과 나머지 함께 구하기

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으로 결과는 실수의 튜플 형식이다.



2.6 제곱(**) 연산

파이썬에서 제곱을 위한 연산자는 이중 곱셈(**)이다. ** 기호 뒤의 숫자는 ** 앞의 숫자를 제곱 하라는 의미이다.

[예제 3- 70] 정수의 제곱 연산하기

4 ** 2

[결과]

16

4의 2제곱 연산 결과는 정수 16이다.


[예제 3- 71] 정수의 세제곱 연산하기

4 ** 3

[결과]

64

4의 3제곱 연산 결과는 정수 64이다.



2.7 비트(bit) 연산

파이썬은 비트 단위 연산을 위한 다양한 연산자를 제공한다. 다음은 비트 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이다.



2.7.1 파이썬 비트 연산자

다음은 파이썬에서 지원하는 비트 연산자들이다.

[표 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에 저장


2.7.2 AND 연산

AND 연산은 두 비트가 동시에 참이 성립하는지 묻는 연산이다. 같은 자리에 두 비트가 모두 1 이면 결과도 1이고, 하나라도 0이 있다면 0이다.

image

[그림 3-2-1] 비트 AND 연산



2.7.3 OR 연산

OR 연산은 두 비트 중에서 하나라도 참이 성립하는지 묻는 연산이다. 같은 자리의 두 비트 중에 하나라도 1이라면 결과는 1이고 둘 다 0이라면 결과는 0이다.

image

[그림 3-2-2] 비트 OR 연산



2.7.4 XOR 연산

XOR 연산은 베타연산이다. 두 비트중에 하나만 1이고 나머지가 0이면 결과는 0이고, 두 비트 모두 0이나 1인 경우 결과는 1이다.

image

[그림 3-2-3] 비트 XOR 연산



2.7.5 좌측 Shift 연산

좌측으로 1bit 자리 이동 하면 우측 끝 민 자리에 0이 추가된다. 2진수 이므로 2를 곱한것과 같다.

image

[그림 3-2-4] 비트 좌측 Shift 연산



2.7.6 우측 Shift 연산

우측으로 1bit 자리 이동하면 우측 끝의 1비트가 제거되고, 2로 나눈 몫이 남는다.

image

[그림 3-2-5] 비트 우측 Shift 연산