Swift 연산자와 표현식
표현식 구문
표현식(expression): 데이터를 가직 작업하는 가장 기본적인 방법
가장 기본적인 스위프트 표현식: 하나의 연산자(operator) + 두 개의 피연산자(operand) + 할당자(assignment)
var myResult = 1 + 2 // '+'(연산자) '1','2'(피연산자) '='(할당자)
기본 할당 연산자
’=’ : 표현식의 결과를 변수에 저장하는 역할
var x: Int? // 옵셔널 Int 변수 선언
var y = 10 // 두 번째 Int 변수 선언과 초기화
x = 10 // x에 값 할당
x = x! + y // 언래핑한 x와 y의 합을 x에 할당
x = y // y의 값을 x에 할당
왼쪽의 피연산자: 값을 할당받는 변수 또는 상수
오른쪽의 피연산자: 할당할 값
산술 연산자
이항 연산자(binary operator): 두 개의 피연산자를 받음
단항 음수 연산자(unary negative operator): 하나의 피연산자를 받음
뺄셈 연산자(subtraction operator): 두 개의 피연산자를 받음, 이항 연산자에 포함
var x = -10 // 단항 음수 연산자는 변수 x에 -10을 할당하기 위해 사용함
x = x - 5 // 뺄셈 연산자. x에서 5를 뺌
연산자 | 설명 |
---|---|
-(단항) | 변수 또는 표현식의 값을 음수로 만듦 |
* | 곱셈 |
/ | 나눗셈 |
+ | 덧셈 |
- | 뺄셈 |
% | 나머지 연산 |
복합 할당 연산자
x = x + y
-> x += y
연산자 | 설명 |
---|---|
x += y | x와 y를 더한 결과를 x에 저장 |
x -= y | x에서 y를 뺀 결과를 x에 저장 |
x *= y | x와 y를 곱한 결과를 x에 저장 |
x /= y | x를 y로 나눈 결과를 x에 저장 |
x %= y | x를 y로 나눈 나머지를 x에 저장 |
비교 연산자
이항 연산자에 포함
프로그램 흐름 제어 로직을 만드는데 가장 많이 사용(조건문 if)
if x == y {
// 작업 수행
}
비교 결과는 Bool 타입의 변수에 저장
var result: Bool?
var x = 10
var y = 20
result = x < y //Optional(true)
연산자 | 설명 |
---|---|
x == y | x와 y가 같으면 true |
x > y | x가 y보다 크면 true |
x >= y | x가 y보다 크거나 같으면 true |
x < y | x가 y보다 작으면 true |
x <= y | x가 y보다 작거나 같으면 true |
x != y | x가 y와 같지 않으면 true |
불리언 논리 연산자
- NOT(!) 연산자
불리언 변수의 현재 값 또는 표현식의 결과를 반전var flag = true // 변수는 true다 var secondFlag = !flag // secondFlag에는 false가 저장된다
- AND(&&) 연산자
두 개의 피연산자가 모두 true일 때만 true를 반환if (10 < 20) && (20 < 10) { print("Expression is true") }
- OR(||) 연산자
두 개의 피연산자 중 하나가 true라고 판단되면 true를 반환
두 개의 피연산자 중 어느 것도 true가 아니라면 false를 반환if (10 < 20) || (20 < 10) { print("Expression is true") }
범위 연산자
범위를 설정(정수만 사용이 가능하고 실수나 텍스트는 불가능!)
-
닫힌 범위 연산자(closed range operator)
x...y
(x부터 y까지, x,y포함) -
반 개방 범위 연산자(half-open range operator)
x...<y
(x부터 y전까지, y는 포함x) -
단방향 범위 연산자(one-sided range operator)
x...
(x부터 끝까지)
...y
(처음부터 y까지)
삼항 연산자
삼항 연산자(ternary operator, 조건부 연산자)
조건문 ? 참(true)인 경우의 표현식 : 거짓(false)인 경우의 표현식
let x = 10
let y = 20
print("Largest number is \(x > y ? x : y)") //Largest number is 20
비트 연산자
171(10진수) -> 10101011(2진수)
3(10진수) -> 00000011(2진수)
NOT 비트 연산
- 틸드(~)문자로 표현
- 숫자의 모든 비트를 반대로 만듦(0->1, 1->0)
00000011 NOT
========
1111/1100 (뒷 4자리 1100만 보면 된다. 4번째자리인 부호비트 1은 음수를 의미) = -4
let y = 3
let z = ~y
print("Result is \(z)") //-4
AND 비트 연산
- 앰퍼샌드(&)문자로 표현
- 두 숫자의 2진수를 가지고 서로 해당하는 위치의 비트가 모두 1이면 1
10101011 AND
00000011
========
0000/0011 = 3
let x = 171
let y = 3
let z = x & y
print("Result is \(z)") //3
OR 비트 연산
- 수직바(|)문자로 표현
- 두 개의 피연산자 중 하나라도 1이 있으면 1
10101011 OR
00000011
========
1010/1011 = 171
let x = 171
let y = 3
let z = x | y
print("Result is \(z)") //171
XOR 비트 연산
- 캐럿(^)문자로 표현
- 두 개의 비트 중 하나만 1일 경우에 1
10101011 XOR
00000011
========
1010/1000 = 168
let x = 171
let y = 3
let z = x ^ y
print("Result is \(z)") //168
왼쪽 시프트 비트 연산
- («)문자로 표현, 그 뒤에는 얼마나 이동할지에 대한 숫자 표시
- 2진수의 각 비트를 지정된 횟수만큼 왼쪽으로 이동
- 정수값은 두 배
10101011 1비트 왼쪽 시프트
========
1/0101/0110 = 342
let x = 171
let z = x << 1
print("Result is \(z)") //342
오른쪽 시프트 비트 연산
- (»)문자로 표현, 그 뒤에는 얼마나 이동할지에 대한 숫자 표시
- 2진수의 각 비트를 지정된 횟수만큼 오른쪽으로 이동
- 정수값은 절반
10101011 1비트 오른쪽 시프트
========
0101/0101 = 85
let x = 171
let z = x >> 1
print("Result is \(z)") //85
복합 비트 연산자
연산자 | 설명 |
---|---|
x &= y | x와 y의 AND 비트 연산을 하고 그 결과를 x에 할당 |
x |= y | x와 y의 OR 비트 연산을 하고 그 결과를 x에 할당 |
x ^= y | x와 y의 XOR 비트 연산을 하고 그 결과를 x에 할당 |
x «= n | x를 n번 왼쪽 시프트 비트 연산을 하고 그 결과를 x에 할당 |
x »= n | x를 n번 오른쪽 시프트 비트 연산을 하고 그 결과를 x에 할당 |