티스토리 뷰
목차
-
Operator Basics (연산자 기초)
-
Arithmetic Operators (산술 연산자)
-
Overflow Operators (오버플로우 연산자)
-
Comparison Operators (비교 연산자)
-
Logical Operators (논리 연산자)
-
Ternary Conditional Operator (삼항 연산자)
-
Assignment Operators (할당 연산자)
-
Range Operators (범위 연산자)
Operator Basics (연산자 기초)
- Operator (연산자), Operand (피연산자), Whitespaces (공백)
- Unary Operator (단항 연산자)
- Binary Operator (이항 연산자)
- Ternary Operator (삼항 연산자)
- Prefix Operator (전치/전위 연산자)
- Postfic Operator (후치/후위 연산자)
- Infix Operator
- Precedence (우선순위)
- Associative (결합성)
Operator (연산자), Operand (피연산자), Whitespaces (공백)
a + b
// '+' = Operator(연산자)
// 'a', 'b' = Operand(피연산자)
// Whitespaces (공백)
Unary Operator (단항 연산자)
a+
// 'a+'처럼 피연산자가 1개일 때
+a // O, ''+'연산자를 단항연산자로 쓰고 싶다면 붙여서 써야한다.
+ a // X, 연산자와 피연산자를 공백으로 분리해버리면 더 이상 단항연산자가 아니다.
Binary Operator (이항 연산자)
a + b
// 피연산자가 2개일 때
a+b // O, but 간혹 오류가 발생할 수 있다.
a + b // O, 추천 코드
// 공백은 상관이 없다.
a +b // X
a+ b // X
// 연산자 양쪽에 공백을 동일하게 추가해야 한다.
Ternary Operator (삼항 연산자)
a ? b : c
/*
피연산자가 3개일 때
피연산자가 4개이상인 경우는 없다.
피연산자와 연산자 양쪽에 공백을 추가해야 한다.
*/
Prefix Operator (전치/전위 연산자)
+a
// '+' = Prefix Operator (전치[=전위] 연산자)
Postfic Operator (후치/후위 연산자)
a+
// '+' = Postfic Operator (후치[=후위] 연산자)
Infix Operator
a + b
// '+' = Infix Operator
Precedence (우선순위)
a + (b * c)
// (b * c) 먼저
(((a + b) * c) - d) * e
// 가장 안쪽에 있는 괄호부터
a + b + c
// 계산순서[=우선순서]가 동일
a - b - c
3 - 2 - 1
// 우선순서에 따라 완전히 결과가 달라짐.
Associative (결합성)
- Left Associative ( → 좌결합성)
- Right Associative ( ← 우결합성)
3 - 2 - 1 // 0
// Left Associative ( → 좌결합성)
Q) Precedence(우선순위)와 Associative(결합성)을 외워야 할까?
가장 안쪽에 있는 괄호부터 진행되기에
( )
괄호만 있으면 Precedence(우선순위)와 Associative(결합성)을 외울 필요가 없다.
Arithmetic Operators (산술 연산자)
- Unary Plus Operator (단항 플러스 연산자)
- Addition Operator (덧셈 연산자)
- Unary Minus Operator (단항 마이너스 연산자)
- Subtraction Operator (뺄셈 연산자)
- Multiplication Operator (곱셈 연산자)
- Division Operator (나눗셈 연산자)
- Remainder Operator (Modulo Operator) (나머지 연산자)
- Overflow (오버플로우)
Unary Plus Operator (단항 플러스 연산자)
+a
let a = 2
let b = 7
+a // 2
+b // 7
// 현재 값을 그대로 반영, 사실 효용성이 없어 잘 사용하지 않는다.
Addition Operator (덧셈 연산자)
a + b
a + b // 9
Unary Minus Operator (단항 마이너스 연산자)
-a
-a // -2
// '-'연산자가 단항으로 쓰일 때에는 부호를 바꿔준다.
Subtraction Operator (뺄셈 연산자)
a - b
a - b // -5
Multiplication Operator (곱셈 연산자)
a * b
a * b // 14
Division Operator (나눗셈 연산자)
a / b
let a = 2
let b = 7
a / b // 0, a를 b로 나눈 몫
b / a // 3, b를 a로 나눈 몫
let c = Double(a) // 실수
let d = Double(b) // 실수
c / d // 0.2857142857142857
d / c // 3.5
Remainder Operator (Modulo Operator) (나머지 연산자)
a % b
a % b // 2, a를 b로 나눈 나머지
b % a // 11, b를 a로 나눈 나머지
c.truncatingRemainder(dividingBy: d)
// 2, 실수에서 나머지 연산을 할 때 사용하는 메소드
Overflow (오버플로우)
let num: Int8 = 9 * 9 // 81
let num: Int8 = 9 * 9 * 9 // error
// error :: Arithmetic operation '81 * 9' (on type 'Int8') results in an overflow
let num2: Int = 9 * 9 * 9 // 729
Overflow Operators (오버플로우 연산자)
- Overflow Addition Operator
- Overflow Subtraction Operator
- Overflow Multiplication Operator
Int8.min // -128
Int8.max // 127
let num: Int8 = Int8.max // 127
/* let num: Int8 = Int8.max + 1
error : Arithmetic operation '127+1' (on type 'Int8' results in an oveflow */
Overflow Addition Operator
a &+ b
let a: Int8 = Int8.max // 127
//let b: Int8 = a + 1 // error
let b: Int8 = a &+ 1 // -128
Overflow Subtraction Operator
a &- b
let c: Int8 = Int8.min // -128
let d: Int8 = c &- 1 // 127
Overflow Multiplication Operator
a &* b
let e: Int8 = Int8.max &* 2 // -2, 지금은 이해하려 하지 말자
Comparison Operators (비교 연산자)
- Equal to Operator
- Not equal to Operator
- Greater than Operator
- Greater than or equal to Operator
- Less than Operator
- Less than or equal to Operator
Equal to Operator
a == b
let a = 13
let b = 25
a == b // false
"swift" == "Swift" // false
let c = 13.25
a == c // error : 같은 자료형만 비교 가능
Not equal to Operator
a != b
let a = 13
let b = 25
a != b // ture
Greater than Operator
a > b
let a = 13
let b = 25
a > b // false
a < b // true
"swift" > "Swift" // true, 아스키코드에 의해서
Greater than or equal to Operator
a >= b
a >= b // false
7 < 7 // false
7 <= 7 // ture
Less than Operator
a < b
a < b // true
Less than or equal to Operator
a <= b
a <= b // true
Logical Operators (논리 연산자)
- Logical NOT Operators
- Logical AND Operators
- Logical OR Operators
Logical NOT Operators
!a
let a = 2
let b = 7
a < b // true
!(a < b) // false
!true // false
Logical AND Operators
a && b
a > 1 && b % 2 == 0 // false
// a(2) > 1 // true
// b % 2 = 1 // false
true && true //true, 모든 연산자가 true인 경우에만 true를 리턴한다.
true && false //false
false && true //false
false && false //false
Logical OR Operators
a || b
a > 1 || b % 2 == 0 // true
// a(2) > 1 // true
// b % 2 = 1 // false
true || true //true, 하나의 연산자가 true여도 true를 리턴한다.
true || false //true
false || true //true
false || false //false
Ternary Conditional Operator (삼항 연산자)
codition ? expression1 : expression2
let hour = 12
hour < 12 ? "am" : "pm"
/* hour < 12가 true일 경우 "am" 출력
hour < 12가 false일 경우 "pm" 출력 */
if hour < 12 { "am" }
else { "pm" } // pm
hour < 12 ? "am" : 14 // error - 2번째 피연산자와 3번째 피연산자의 자료형이 같아야 한다.
// hour < 10 "Good Morning"
// hour < 18 "Good Afternoon"
// "Good Evening
hour < 10 ? "Good Morning" : hour < 18 ? "Good Afternoon" : "Good Evening"
// 조건 연산자는 선택할 수 있는 값이 2개인 경우에만 사용한다. 그 이상은 코드가 위처럼 복잡해진다.
Assignment Operator (할당 연산자)
- Assignment Operator (할당 연산자)
- Compound Assignment Operators (복합 할당 연산자)
- Addition Assignment Operator
- Subtraction Assignment Operator
- Multiplication Assignment Operator
- Division Assignment Operator
- Modulo Assignment Operator
- Bitwise AND Assignment Operator
- Bitwise OR Assignment Operator
- Bitwise XOR Assignment Operator
- Bitwise Left Shift Assignment Operator
- Bitwise Right Shift Assignment Operator
Assignment Operator (할당 연산자)
a = b
// 할당 연산자는 값을 저장하는 역할이 전부지만 상당히 중요한 역할이다.
let a = 10
var b = 20
b = a // 10
if a == 0 { } // 실행가능, 비교 연산자는 boolean을 통해 값을 리턴한다.
if a = 0 { } // error, 할당 연산자는 값을 리턴하지 않는다.
let a = 10
var b = 20
b = a
// lvalue (letf) // let a, let b, b
// rvalue (right) // 10, 20, a
Compound Assignment Operators (복합 할당 연산자)
Addition Assignment Operator
a += b
a = a + b
var a = 1
var b = 2
a = a + b // 3
a = 1
b = 2
a += b // 3
Subtraction Assignment Operator
a -= b
a = a - b
Multiplication Assignment Operator
a *= b
a = a * b
Division Assignment Operator
a /= b
a = a / b
Modulo Assignment Operator
a %= b
a = a % b
Bitwise AND Assignment Operator
a &= b
a = a & b
Bitwise OR Assignment Operator
a |= b
a = a | b
Bitwise XOR Assignment Operator
a ^= b
a = a ^ b
Bitwise Left Shift Assignment Operator
a <<= b
a = a << b
Bitwise Right Shift Assignment Operator
a >>= b
a = a >> b
Range Operators (범위 연산자)
- Closed Range Operator
- Half-Opern Range Operator
Closed Range Operator
a ... b
a...
...a
1 ... 20
// 1~20까지의 범위
// lowerBound = 1, upperBound = 20
20 ... 1 // error: Can't form Range with upperBound < lowerBound
(1 ... 20).reversed() // 20~1까지의 범위
var sum = 0
for num in 1 ... 10 {
num
sum += num
}
print(sum) // 55
let list = [1, 2, 3, 4, 5]
list[2...] // [3, 4, 5]
list[...2] // [1, 2, 3]
Half-Open Range Operator
a ..< b
..<a
1 ..< 20 // 1~19
let list = [1, 2, 3, 4, 5]
list[2<..] // [4, 5]
list[..<2] // [1, 2]
let range = 0 ... 20
range.contains(13) // true
range.contains(25) // false
let range2 = ... 20 // 단독으로 사용하면 lowBound는 무한대가 된다.
range.contains(-123) // true
range.contains(Int.min) // true
'Swift' 카테고리의 다른 글
[Swift] Loop Statements (반복문) (0) | 2021.02.16 |
---|---|
[Swift] Conditional Statements (조건문) (0) | 2021.02.16 |
[Swift] Data Types(자료형), Boolean, Numbers(숫자), Characters(문자), Strings(문자열) (0) | 2021.02.14 |
[Swift] Variables(변수), Constants(상수), Naming Convention(명명 규칙), Scope(범위) (0) | 2021.02.13 |
[Swift] 주석, print 함수, dump 함수 (0) | 2021.02.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 비트연산자
- 산술연산자
- labeled
- 객체지향 생활체조
- 전산구문 기초용어
- datatypes
- continue
- variables
- enumerations
- playground
- Constants
- 범위연산자
- 오버플로우연산자
- 흐름제어구문
- 구문이름표
- conditional
- 반복문
- optional
- iOS View Life Cycle
- scope
- overflow
- 세자리수마다 콤마넣기
- 결합성
- 오토레이아웃
- RawValues
- 훈련법
- Functions
- 옵셔널
- swift
- 삼항연산자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함