3. 연산자
3.1 산술 연산자
|
연산자
|
설명
|
|
+
|
덧셈
|
|
-
|
뺄셈
|
|
*
|
곱셈
|
|
**
|
거듭제곱
|
|
/
|
나눗셈
|
|
//
|
나눗셈의 몫
|
|
%
|
나눗셈의 나머지
|
+ (덧셈)
숫자와 문자 구분 없이 두개의 객체를 더합니다.
|
>>> # (+) 덧셈
... # 숫자
... 10 + 20
30
>>> # 문자
... 'abcd' + 'efgh'
'abcdefgh'
|
- (뺄셈)
숫자에서 숫자를 뺍니다.
|
>>>
# - (뺄셈)
... 10 - 5
5
>>> 20.7 - 10.2
10.5
|
* (곱셈)
두 숫자를 곱하기 연상을 하고 문자인 경우 숫자만큼 반복 합니다.
|
>>> # * (곱셈)
... 2 * 3
6
>>> 'abc ' * 3
'abc abc abc '
|
** (거듭제곱)
숫자에 지수연산을 합니다.
|
>>> # ** (거듭제곱)
... 3 ** 3
27
>>> 3 * 3 * 3
27
|
/ (나눗셈)
두 수를 나눕니다.
정수로 표현 하려면 정수변환을 해야 합니다.
|
>>>
# / (나눗셈)
... 13 / 3
4.333333333333333
>>> 13.0 / 3
4.333333333333333
>>> a = 13/3
>>> print(a)
4.333333333333333
>>> print(int(a))
4
|
// (나눗셈의 몫)
나눗셈의 몫을 구하는 식을 사용 하는 경우 양의 수에만 사용하여야 합니다. 음의 수의 경우 원하는 결과와 다른 값을 얻을 수 있습니다. 그 이유는 몫을 구할 때 좌측에 가까운
정수를 가져오기 때문입니다.
|
>>> # (//) 나눗셈의 몫
... 13 // 3
4
>>> 13.0 // 3
4.0
>>> -13 // 3
-5
>>> -13.0 // 3
-5.0
>>> divmod(-13, 3)
(-5, 2)
>>> divmod(13, 3)
(4, 1)
>>> abs(-13.0) // 3
4.0
|
0을 기준으로 보았을 때 양의 수는 우측으로 커지고 4.3333의 좌측에 있는 정수는 4입니다.
0을 기준으로 보았을 때 음의 수는 좌측으로 커지고 -4.3333의 좌측에 있는 정수는 -5입니다.
목과 나머지를 구하는 이유는 몇번 나눌 수 있는가, 몇이 남는가 이기
때문에 절대값으로 계산을 하는게 정답입니다.
% (나머지)
나눗셈의 나머지 값을 구합니다.
|
>>> # % (나머지)
... 13 % 3
1
>>> 13.0 % 3
1.0
>>> abs(-13.0) % 3
1.0
|

3.2 비교 연산자
True (참) 또는 False (거짓)의 반환 값을 구하는 연산자로 첫 글자는 대문자
입니다.
|
연산자
|
설명
|
|
<
|
작음
|
|
>
|
큼
|
|
<=
|
작거나 같음
|
|
>=
|
크거나 같음
|
|
<>
|
|
|
==
|
같음
|
|
!=
|
같지 않음
|
< (작음)
(x < y) : x가 y보다
작은지 여부를 반환합니다.
|
>>> # < (작음)
... 5 < 7
True
>>> 7 < 5
False
>>> 'a' < 'b'
True
>>> 'azzz' < 'b'
True
>>> 'b' < 'azzzz'
False
>>> 'b' < 'A'
False
>>> 'a' < 'Z'
False
>>> 'z' < 'A'
False
>>> 'a' < 'A'
False
>>> 'A' < 'a'
True
|
다음과 같이 여러 숫자와 문자에 대해 한꺼번에 비교 연산을 수행할 수 있습니다.
숫자와 문자 비교는 오류가 발생 합니다.
|
>>> 2 < 3 < 4 < 5
True
>>> 2 < 4 < 3 < 5
False
>>> 'A' < 'b' < 'C'
False
>>> 'A' < 'C' < 'b'
True
|
> (큼)
(x < y) : x가 y보다
작은지 여부를 반환합니다.
|
>>> # > (큼)
... 5 > 7
False
>>> 7 > 5
True
>>> 'a' > 'b'
False
>>> 'azzz' > 'b'
False
>>> 'b' > 'A'
True
>>> 'a' > 'Z'
True
>>> 'a' > 'A'
True
|
여러개 비교
|
>>> 5 > 4 > 3 > 2
True
>>> 'c' > 'b' > 'a'
True
>>> 'a' > 'Z' > 'A'
True
|
<= (작거나 같음)
(x <= y) : x 가 y
보다 작거나 같은지 여부를 반환합니다.
<= 기호를 띄어쓰기 하면 오류가 발생 합니다.
|
>>> # <= (작거나 같음)
... x = 10
>>> y = 20
>>> x < = y
File
"<stdin>", line 1
x < = y
^
SyntaxError: invalid syntax
>>> x <= y
True
|
>= (크거나 같음)
(x >= y) : x 가 y
보다 크거나 같은지 여부를 반환합니다.
|
>>> # >= (크거나 같음)
... x = 10
>>> y = 20
>>> x >= y
False
>>> x = 'b'
>>> y = 'a'
>>> x >= y
True
|
== (같음)
(x == y) : x, y 두 객체가 같은지 여부를 반환합니다.
|
>>> # == (같음)
... x = 10
>>> y = 10
>>> x == y
True
>>> x = 'a'
>>> y = 'b'
>>> x == y
False
>>> x = 'aaa'
>>> y = 'aAa'
>>> x == y
False
|
!= (같지 않음)
(x != y) : x, y 두 객체가 같지 않은지 여부를 반환합니다.
|
>>> # != (같지 않음)
... x = 'aaa'
>>> y = 'aAa'
>>> x != y
True
>>> x = 10
>>> y = 100
>>> x != y
True
|
3.3 부울 연산자
|
연산자
|
수식
|
결과
|
|
and
|
True and True
|
True
|
|
True and False
|
False
|
|
False and False
|
False
|
|
or
|
True or True
|
True
|
|
True or False
|
True
|
|
False or False
|
False
|
|
not
|
not True
|
False
|
|
not False
|
True
|
and
(x and y) : x와 y가
모두 True인 경우에만 True 이고 둘중 하나 또는 둘다
False이면 False를 반환 합니다.
|
>>> # and
... True and True
True
>>> (3 == 3) and (7 ==7)
True
>>> True and False
False
>>> (3 == 3) and (7 == 8)
False
>>> False and False
False
>>> (3 == 4) and (7 == 8)
False
|
or
(x and y) : x와 y가
모두 False인 경우에만 False이고 둘 또는 하나만
True이어도 True를 반환합니다.
|
>>> # or
... True or True
True
>>> (3 == 3) or (7 == 7)
True
>>> True or False
True
>>> (3 == 3) or (7 == 8)
True
>>> False or False
False
>>> (3 == 4) or (7 == 8)
False
|
not
x 가 True 이면 반대
값인 False 를 반환하고 x 가 False 이면 반대 값인 True를 반환합니다.
|
>>> # not
... not True
False
>>> not (3 == 3)
False
>>> not False
True
>>> not (7 == 8)
True
|
3.4 비트 연산자
|
연산자
|
설명
|
|
<<
|
왼쪽 시프트 연산자, 변수 값을 지정된 비트 만큼 좌측 이동
|
|
>>
|
오른쪽 시프트 연산자, 변수 값을 지정된 비트 만큼 우측 이동
|
|
&
|
AND 연산자, 둘다 참인 경우 True
|
|
|
|
OR 연산자, 둘중 하나만 참이어도 True
|
|
^
|
XOR 연산자, 둘중 하나만 참이어야 True
|
|
~
|
반전 연산자, 참이면 False, 거짓이면
True
|
<< (왼쪽 시프트)
지정된 숫자에 대해 지정된 비트 수 만큼 왼쪽으로 시프트 연산을 진행 합니다. 비트가 상위로 올라가며 숫자가 커집니다.
5 << 2 : 5(0000 0101)를 2비트 좌측으로 이동하여 20(0001 0100)이 됩니다.
2 << 3 : 2(0010)를 왼쪽으로 3비트 시프트 하여 16(0001 0000)이 됩니다.
|
>>> # << (왼쪽 시프트)
... 5 << 2
20
>>> 2 << 3
16
|
>> (오른쪽 시프트)
지정된 숫자에 대해 지정된 비트 수 만큼 오른쪽으로 시프트 연산을 진행 합니다. 비트가 우측으로 이동 하면서 첫째 자리를 넘어가는 비트는 삭제가 되어
숫자가 작아집니다.
5 >> 2 : 5(0101)를 2비트 우측으로 이동하여 1(0001)이 됩니다.
54 >> 3 : 54(0011 0101)을 오른쪽으로 3비트 시프트 연산하여 6(0110)이 됩니다.
|
>>> # >> (오른쪽 시프트)
... 5 >> 2
1
>>> 54 >> 3
6
|
& (비트 AND 연산자)
(x & y) : x와 y에
대하여 각각의 자리수에 있는 비트에 대해 AND 연산을 진행 합니다. 각 자리수별 비트 값이 1인
경우에만 1이 되고 나머지는 0으로 처리합니다.
(1101) 13 &
(1010) 10
(1000) 8을 반환합니다. 13과
10의 자리수 별 비트 값이 모두 1인 부분만 제외하고 0이 됩니다.
|
>>> # & (비트 AND
연산자)
... 13 & 10
8
|
| (비트 OR 연산자)
(x & y) : x와 y에
대하여 각각의 자리수에 있는 비트에 대해 OR 연산을 진행 합니다. 각 자리수별 비트 값이 0인
경우에만 0이 되고 나머지는 1으로 처리합니다.
(1101) 13 |
(1010) 10
(1111) 15를 반환합니다.
13과 10의 자리수 별 비트 값이 하나라도 1이면
1로 됩니다.
|
>>> # | (비트 OR 연산자)
... 13 | 10
15
|
^ (비트 XOR 연산자)
(x & y) : x와 y에
대하여 각각의 자리수에 있는 비트에 대해 XOR 연산을 진행 합니다. 각 자리수 별 비트 값이 하나만 1인
경우에 1이 되고 나머지는 0으로 처리합니다.
(1101) 13 ^
(1010) 10
(0111) 7을 반환합니다. 13과
10의 자리수 별 비트 값중 하나만 1이면 1로 됩니다.
|
>>> # ^ (비트 XOR 연산자)
>>> 13 ^ 10
7
|
~ (비트 반전 연산자)
진정수에 사용하고 –( x + 1)으로 정의 된다고 Python document에 나와 있습니다.
The bitwise inversion of x is defined as
-(x+1). It only applies to integral numbers.
보이는 숫자만 보면 안되고 데이터를 처리하는 단위(32, 64bit)로 나머지도 변경이 됩니다.
(1101) 13
000000000000000000000000000000000000000000000000000000000000(1101) 13
111111111111111111111111111111111111111111111111111111111111(0010)
-14
|
>>> # ~ (비트 반전 연산자)
... ~13
-14
|
- copy coding -