Swift 연산자와 표현식

4 분 소요

표현식 구문

표현식(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

불리언 논리 연산자

  1. NOT(!) 연산자
    불리언 변수의 현재 값 또는 표현식의 결과를 반전
    var flag = true // 변수는 true다
    var secondFlag = !flag // secondFlag에는 false가 저장된다
    
  2. AND(&&) 연산자
    두 개의 피연산자가 모두 true일 때만 true를 반환
    if (10 < 20) && (20 < 10) {
        print("Expression is true")
    }
    
  3. OR(||) 연산자
    두 개의 피연산자 중 하나가 true라고 판단되면 true를 반환
    두 개의 피연산자 중 어느 것도 true가 아니라면 false를 반환
    if (10 < 20) || (20 < 10) {
        print("Expression is true")
    }
    
    

범위 연산자

범위를 설정(정수만 사용이 가능하고 실수나 텍스트는 불가능!)

  1. 닫힌 범위 연산자(closed range operator)
    x...y(x부터 y까지, x,y포함)

  2. 반 개방 범위 연산자(half-open range operator)
    x...<y(x부터 y전까지, y는 포함x)

  3. 단방향 범위 연산자(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에 할당