일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Windows
- 지식나눔강좌
- 포인터
- 이지스퍼블리싱
- Tips프로그래밍강좌
- Visual Studio
- 김성엽
- tipssoft
- Programming
- c
- 문법
- VS ERROR
- 티스토리
- Direct2D
- 알고리즘
- doit코틀린프로그래밍
- 연산자
- 배열
- 백준
- CS
- Win32
- 프로그래밍
- 리뷰
- Desktop
- Kotlin
- 함수
- c++
- Javascript
- c#
- Tips강좌
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
Kotlin: 05 연산자 본문
이전 포스트들에서 몇 가지 연산자들을 먼저 사용해 보았습니다. 이번 시간에는 먼저 사용한 연산자들을 포함해 어떤 연산자들이 있고 그 기능은 무엇인지 알아봅니다.
산술 연산자
수학에서 산술 연산자라 하면 더하기, 빼기, 곱하기, 나누기로 총 네 가지가 존재합니다. 코틀린에서는 수학의 사칙 연산자에 나머지 연산자[# Modulo operator]라 불리는 연산자까지 총 다섯 가지를 산술 연산자라고 부릅니다.
연산자 | 설명 | 수식 | 결과 |
+ | 더하기 | 15 + 3 | 18 |
- | 빼기 | 13 - 3 | 10 |
* | 곱하기 | 3 * 10 | 30 |
/ | 나누기(몫) | 4 / 2 | 2 |
% | 나머지 | 10 % 3 | 1 |
나머지 연산자에 대한 추가 설명을 하면, 연산자의 좌측 피연산자 값을 우측 피연산자 값으로 나눈 나머지를 구하는 연산자입니다.
증감 연산자 // 200329-2314-added
증감 연산자가 빠졌군요. 증감 연산자는 단항 연산자로서 아래와 같이 생겼고, 또 쓰입니다.
연산자 | 설명 | 수식(i = 5) | k의 값 | i의 값 |
i++ | 후위 증가 연산자 | k = i++ | 5 | 6 |
i-- | 후위 감소 연산자 | k = i-- | 5 | 4 |
++i | 전위 증가 연산자 | k = ++i | 6 | 6 |
--i | 전위 감소 연산자 | k = --i | 4 | 4 |
표의 k와 i 값을 보면 알 수 있듯이 후위 연산자는 값을 대입한 뒤 해당하는 피연산자 값을 증감시키지만, 전위 연산자는 피연산자의 값을 증감시킨 뒤에 대입을 합니다.
대입 연산자
우리가 변수에 값을 할당할 때, 등호를 이용했습니다. 이 등호 또한 연산자로 분류됩니다.
축약형 대입 연산자
만일 대입 연산자의 좌측 피연산자에 연산을 가한 뒤 다시 좌측 피연산자에 연산 결과를 집어넣으려 한다면 축약형 대입 연산자를 사용할 수 있습니다.
var num = 10
num = num * 2
/* equals */
num *= 2
이 축약형 대입 연산자는 모든 산술 연산자를 축약형으로 가질 수 있습니다.
연산자 | 축약형 |
+ | += |
- | -= |
* | *= |
/ | /= |
% | %= |
축약형에 붙는 산술 연산은 우측의 연산이 모두 끝난 뒤 좌측 피연산자와 연산될 때 이용됩니다.
// e.g.
var num:Int = 30
num += 15 * 2
// equals
// num = num + (15 * 2)
비교 연산자
이전 포스트에서 이중 등호와 삼중 등호를 잠시 설명했습니다. 등호 연산자는 비교 연산자에 포함되며, 총 여덟 개의 비교 연산자가 존재합니다.
연산자 | 설명[# 모든 설명은 해당 연산자로 수식을 작성했을 때 True가 반환되는 경우로 설명했습니다] | 수식 | 결과 |
> | 좌측 피연산자가 더 큼 | 3 > 2 | True |
< | 우측 피연산자가 더 큼 | 3 < 3 | False |
>= | 좌측 피연산자가 더 크거나 같음 | 3 >= 5 | False |
<= | 우측 피연산자가 더 크거나 같음 | 80 <= 90 | True |
== | 양쪽 피연산자의 값이 같음 | 1 == 1 | True |
!= | 양쪽 피연산자의 값이 다름 | 13 != 12 | True |
=== | 양쪽 피연산자의 주소가 같음 | 'H' === 'h' | False |
!== | 양쪽 피연산자의 주소가 다름 | 'H' !== 'h' | True |
이 연산자들은 두 값이 대, 소, 같음을 판단하는 연산자이다 보니 반환값이 True, False인 Boolean 타입입니다.
논리 연산자
이 연산자는 양쪽 피연산자를 평가합니다.
연산자 | 설명 | 수식 | 결과 |
&& | 양쪽 피연산자가 모두 참인가 | True && True | True |
||[#\ 키보드에서 원화, 혹은 역슬래시를 Shift와 함께 누르면 나옵니다. 이 블로그에서는 폰트 특성으로 역슬래시로 나오겠네요.] | 양쪽 피연산자 중 하나 이상의 피연산자가 참 | True || False | True |
! | 피연산자의 값을 부정 | !(True) | False |
&& 연산자는 논리곱 연산자로 부릅니다. False를 0, True를 1 이상의 값으로 두었을 때, 곱한 값이 결괏값이 되죠.
|| 연산자는 논리합 연산자로 부릅니다. 양쪽 피연산자의 결과를 더합니다. 더한 값이 논리합 연산자의 결과 값입니다.
부정 연산자 !는 단항 연산자[# 피연산자가 하나인 경우 단항 연산자라고 부릅니다. 논리곱/합 연산자는 피연산자가 두 개 필요하므로 이항 연산자로 부릅니다.]로, 피연산자의 값을 부정합니다.
Extra
비트 연산자
코틀린의 비트 연산은 연산자가 아닌 메서드를 제공합니다. 그러나 중위 표기를 할 수 있도록 코틀린에서 제공하고 있으므로 편의상 연산자로 부르겠습니다. 그러나 비트 연산에는 연산자가 아니라 메서드를 이용한다는 점을 꼭 기억하세요.
비트 연산자의 경우에는 많은 상용 프로그램, 좋은 알고리즘에서 사용하지만 공부할 때는 자주 보지 못할 것입니다. 평소에 보던 것과는 조금은 생소하기 때문이죠. 그래서 굳이 지금 다 알려고 하지는 않아도 됩니다. 물론 더 나은[# 속도, 최적화 측면의] 기능을 만들려고 한다면 꼭 짚고 넘어가야 합니다.
비트 연산은 기본적으로 이진수가 토대가 된다고 보면 됩니다. 따라서 결과 값을 이진수로 표현할 것입니다.
연산자 | 설명 | 수식 | 값 |
x.shl(y) | x의 비트 패턴을 왼쪽으로 y만큼 이동 | 15 shl 3 | 120 |
x.shr(y) | x의 부호 비트를 제외한 비트 패턴을 오른쪽으로 y만큼 이동 | 120 shr 3 | 15 |
x.ushr(y) | x의 부호 비트를 포함한 비트 패턴을 오른쪽으로 y만큼 이동 | -5 ushr 3 | 5_368_780_911[# 언더스코어를 이용하면 값에 영향을 주지 않고 단위 구분을 할 수 있습니다.] |
x.and(y) | x와 y의 각 비트를 논리곱으로 연산 | 5 and 3 | 1 |
x.or(y) | x와 y의 각 비트를 논리합으로 연산 | 5 or 3 | 7 |
x.xor(y) | x와 y의 각 비트를 배타적 논리합으로 연산 | 5 xor 3 | 6 |
x.inv() | x의 비트 패턴을 반전 | 5.inv() | -6 |
주의할 점은 마지막 inv[# inverse의 약자] 메서드는 중위 표기법을 제공하지 않습니다. 또한 우리가 사용하는 goorm ide의 코틀린 버전 기준[# 1.1], 비트 연산 메서드는 기본 정수 자료형 중 Byte, Short는 shl, shr, ushr 메서드를 사용할 수 없습니다. 자세한 내용은 공식 문서를 참고하세요.
Next.
# index
'DEV > Kotlin' 카테고리의 다른 글
Kotlin: 07 함수 (0) | 2020.03.31 |
---|---|
Kotlin: 06 세이프콜과 non-null 단정 (0) | 2020.03.29 |
Kotlin: 04 자료의 비교와 변환 (0) | 2020.03.27 |
Kotlin: 03 출력하기 (0) | 2020.03.24 |
Kotlin: 02 변수와 자료형 (1) | 2020.03.23 |