반응형
Swift
#2. 연산
PC 혹은 태블릿에서
보는 것을 추천드립니다!
대부분 프로그래밍에서
산술 연산 부분은 대부분 동일합니다
산술 연산자
A + B // A 와 B 를 더한 값을 반환합니다 (더하기 연산자)
A - B // A 에서 B 를 뺀 값을 반환합니다 (빼기 연산자)
A * B // A 와 B 를 곱한 값을 반환합니다 (곱하기 연산자)
A / B // A 를 B 로 나눈 값을 반환합니다 (나누기 연산자)
A % B // A 를 B 로 나눈 나머지 값을 반환합니다 (나머지 연산자)
예를 들어
let A = 5
let B = 3
A + B // 8
A - B // 2
A * B // 15
A / B // 1 (Int 값 이라서)
A % B // 2 (5를 3으로 나눈 나머지 값 이라서)
이렇게 됩니다
비교 연산자
A = B // *A에 B의 값을 할당합니다. 이 친구는 할당 연산자 입니다. 대입 연산자라고도 불립니다. 비교 연산자는 아니지만
// A = B 와 A == B 와 차이를 설명하기 위해서 초대했습니다.
A == B // A 와 B가 같으면 True 다르면 False 를 반환합니다.
A != B // A 와 B가 다르면 True 같으면 False 를 반환합니다.
A <= B // A 가 B보다 작거나 같으면 True 다르면 False 를 반환합니다.
A >= B // A 가 B보다 크거나 같으면 True 다르면 False 를 반환합니다.
A < B // A 가 B보다 작으면 True 다르면 False 를 반환합니다.
A > B // A 가 B보다 크면 True 다르면 False 를 반환합니다.
/* 일단 여기까지만 알아도 충분 */
A === B // A 와 B가 레퍼런스 타입일때 같은 인스턴스를 가리키면 True 다르면 False 를 반환합니다.
A !== B // A 와 B가 레퍼런스 타입일때 다른 인스턴스를 가리키면 Ture 같으면 False 를 반환합니다.
A ~= B // A 와 B의 패턴이 매치되면 True 다르면 False 를 반환합니다.
예를 들어
let A = 5
let B = 3
A == B // False
A != B // True
A <= B // False
A >= B // True
A < B // False
A > B // Ture
이렇게 됩니다
범위 연산자
Swift는 범위 연산자를
특이하게 표현합니다
A...B // A 이상 B 이하
A..<B // A 이상 B 미만
A... // A 이상
...A // A 이하
..<A // A 미만
역시나 예를 들어
let A = 3
let B = 10
A...B // 3 ~ 10
A..<B // 3 ~ 9
A... // 3 ~
...A // ~ 3
..<A // ~ 2
이렇게 됩니다
비트 연산자
Drop the bea..t
~A // NOT 비트 연산자: 비트 반전
A & B // AND 비트 연산자: AND 논리 연산
A | B // OR 비트 연산자: OR 논리 연산
A ^ B // XOR 비트 연산자: XOR 논리 연산
A >> B // 시프트 연산자 ( > 이쪽으로 ): A(정수) >> B(만큼) 시프트 연산
A << B // 시프트 연산자 ( < 이쪽으로 ): A(정수) << B(만큼) 시프트 연산
예를 들어
var A = 5 // 0 0 1 1
var B = 2 // 0 0 1 0
~A // -6
~B // -3
A|B // 7
A^B // 7
A >> B // 1
A << B // 20
이렇게 됩니다
팁을 조금 드리자면
~A와 ~B 같은 NOT 비트 연산의 경우
-(A) -1이 NOT 비트 연산의 값이 되고
만약 A 가 -5(음수) 였다면?
-(-5) - 1 =?
4
가 되겠죠?
시프트 연산의 경우
오른쪽 (>>)으로 한 번씩 이동할 때마다
절반의 값이 사라지고
왼쪽 (<<)으로 한 번씩 이동할 때마다
두 배씩 값이 증가합니다
그냥...
편법입니다.. ㅎ
복합 할당 연산자
복합 할당 연산 또한
대부분 프로그래밍 언어에서 지원합니다
A = A + B // A 와 B 의 합을 A 에 할당합니다.
A = A - B // A 와 B 의 차를 A 에 할당합니다.
A = A * B // A 와 B 의 곱을 A 에 할당합니다.
A = A / B // A 와 B 를 나눈 후 몫을 A 에 할당합니다.
A = A % B // A 와 B 를 나눈 후 나머지를 A 에 할당합니다.
A = A >> B // A 를 B 만큼 (오른쪽 >>) 시프트 한 값을 A 에 할당합니다.
A = A << B // A 를 B 만큼 (왼쪽 <<) 시프트 한 값을 A 에 할당합니다.
A = A & B // A 와 B 의 AND 연산 값을 A 에 할당합니다.
A = A | B // A 와 B 의 OR 연산 값을 A 에 할당합니다.
A = A ^ B // A 와 B 의 XOR 연산 값을 A 에 할당합니다.
중요한 점은 A 와 같다는 뜻이 아니라
아까 할당 연산자 ( = ) 기억하셔야 합니다
할당한다는 의미입니다
같다와( == ) 할당한다( = )가 다른 의미를 가진다는 것을
아셔야 합니다!
기타 연산자
// [추후 옵셔널 에서 사용합니다.]
A ?? B // A가 nil이 아니면 A를 반환하고, nil이면 B를 반환합니다.
A! // (옵셔널)A를 강제 추출합니다.
A? // (옵셔널)A를 안전하게 추출하거나, A가 옵셔널임을 표시합니다.
// [오버플로(Overflow) 방지]
&+ // 오버플로를 대비한 덧셈 연산입니다.
&- // 오버플로를 대비한 뺄샘 연산입니다.
&* // 오버플로를 대비한 곱셈 연산입니다.
스위프트에서 사용하는 옵셔널에 대해
잘 모르시는 분들이 많을 테니
오버플로에 대한 예제만 보여드리겠습니다
/* 255ml 를 담을 수 있는 물통이 있는데 1ml 만 더 담아도 모두 쏟아져 버리는 그런 말도안되는 물통이 있다고 칩시다 */
UInt8.max // 255 (UInt8 의 최대값은 255 입니다)
var 물통255ml = UInt8.max - 2 // 253
// 물통255ml += 256 | 잘못된 표현 255 가 최대값이기 때문에 256을 담을 수 없다
// 오버플로 연산자에 할당 연산자를 더한 오버플로 할당 연산자 입니다.
물통255ml &+= 1 // 254
물통255ml &+= 1 // 255 (최대)
물통255ml &+= 1 // 0 (모두 쏟아짐)
print(물통255ml) // 0
원래대로라면 마지막
물통255ml &+= 1
에서 런타임 오류로
컴파일이 불가능했을 텐데
오버플로 연산자를 이용해서
컴파일이 가능했습니다
하다 보니 분량이 너무 길어져서...
#3. 제어로 찾아오겠습니다
: )
반응형
'Programming•프로그래밍 > Swift•스위프트' 카테고리의 다른 글
Swift 5 프로그래밍 / #1. 변수와 타입 (0) | 2020.05.27 |
---|---|
Swift 5 프로그래밍 / #0. 사전 준비 (1) | 2020.05.26 |
Swift 5 프로그래밍 / Swift 5 Programming / Prologue (0) | 2020.05.26 |