비트 연산자 - Bitwise Operators
비트 단위로 연산하는 연산자. 첫 번째 비트를 부호 비트로 사용하는 signed type의 자료형은 비트 연산에 주의해야 한다.
- 비트 NOT 연산자 - Bitwise NOT Operator 👉
~a
value1 | ~value1 |
---|---|
0 | 1 |
1 | 0 |
// unsigned int8
let a : UInt8 = 0b0101_1011 // 91 (0101 1011)
let b : UInt8 = ~a // 164(1010 0100)
// signed int8
let c : Int8 = 0b0101_1011 // 91 (0101 1011)
let d : Int8 = ~c // -92(1010 0100)
- 비트 AND 연산자 - Bitwise AND Operator 👉
a & b
두 비트 모두 1이어야 1, 아니면 0이다.
value1 | value2 | value1 & value2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
let a : UInt8 = 0b0101_1011 // 91(0101 1011)
let b : UInt8 = 0b0010_0001 // 33(0010 0001)
let val2 = a & b // 1 (0000 0001)
- 비트 OR 연산자 - Bitwise OR Operator 👉
a | b
두 비트중에 하나라도 1이면 1, 둘 다 0이면 0이다.
value1 | value2 | value1 | value2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
let a : UInt8 = 0b0101_1011 // 91 (0101 1011)
let b : UInt8 = 0b0010_0001 // 33 (0010 0001)
let val2 = a | b // 123(0111 1011)
- 비트 XOR 연산자 - Bitwise OR Operator 👉
a ^ b
두 비트의 값이 달라야 1이고, 값이 같으면 0이다.
value1 | value2 | value1 ^ value2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
let a : UInt8 = 0b0101_1011 // 91 (0101 1011)
let b : UInt8 = 0b0010_0001 // 33 (0010 0001)
let val2 = a ^ b // 122(0111 1010)
- 비트 왼쪽 시프트 연산자 - Bitwise Left Shift Operator 👉
a << n
비트를 왼쪽으로 n칸씩 이동시키고, 오른쪽의 빈 비트를 0으로 채운다. signed의 경우 부호 변화에 주의해야 한다. a << n의 값은 a * 2^n^의 값과 같다.
// unsigned int8
let a : UInt8 = 0b0101_1011 // 91 (0101 1011)
let b = a << 1 // 182(1011 0110)
// signed int8
let c : Int8 = 0b0101_1011 // 91 (0101 1011)
let d = a << 1 // -74(1011 0110)
- 비트 오른쪽 시프트 연산자 - Bitwise Left Shift Operator 👉
a >> n
비트를 오른쪽으로 n칸씩 이동시키고, 왼쪽의 빈 비트를 unsigned의 경우 0으로 채우며(논리적 시프트 Logical Shift) signed의 경우 부호 비트로 채운다(양수인 경우 0, 음수인 경우 1 - 산술 시프트 Arithmetic Shift). a >> n의 값은 a / 2^n^의 값과 같다.
// unsigned int8
let a : UInt8 = 0b0101_1011 // 91 (0101 1011)
let b = a >> 1 // 182(1011 0110)
// signed int8
let c : Int8 = 0b0101_1011 // 91 (0101 1011)
let d = ~c // -92(1010 0100)
let e = d >> 1 // -46(1101 0010)
할당 연산자 - Assignment Operators
값을 저장하는 데 사용되는 연산자이다.
할당 연산자 | 설명 | 사용 예시 |
---|---|---|
= | b의 값을 a에 저장. ==와 헷갈리지 말자. | a = b |
+= | a + b의 값을 a에 저장 | a += b |
-= | a - b의 값을 a에 저장 | a -= b |
*= | a * b의 값을 a에 저장 | a *= b |
/= | a / b의 값을 a에 저장 | a == b |
%= | a % b의 값을 a에 저장 | a %= b |
&= | a & b의 값을 a에 저장 | a &= b |
|= | a | b의 값을 a에 저장 | a |= b |
<<= | a << b의 값을 a에 저장 | a <<= b |
>>= | a >> b의 값을 a에 저장 | a >>= b |
할당한 값을 리턴하는 Objective-C의 할당문과는 다르게 Swift의 할당문은 어떠한 값도 리턴하지 않는다.
범위 연산자 - Range Operators
Swift에서 범위를 표현하는 방식이다.
- 닫힌 구간 범위 연산자 - Closed range Operator 👉
a...b
,a...
,...a
👉 a...b = [a, b] 닫힌 구간 범위 연산은 upperBound와 lowerBound의 값을 포함한다. 또한, lowerBound의 값이 upperBound의 값보다 클 수 없다.(10...1 불가능) > 내림차순 범위가 필요하다면 `reversed()` 메소드를 사용하면 된다. ```swift (1...10).reversed() // 10, 9, ..., 2, 1 ```
var sum = 0
for num in 1...10 {
sum += num
}
// sum = 55
let list = ["A", "B", "C", "D", "E"]
list[2...] // ["C", "D", "E"]
list[...2] // ["A", "B", "C"]
- 반 열린 구간 범위 연산자 - Half-Open range Operator 👉
a..<b
,..<a
👉 a...b = [a, b) Python의 `range()`처럼 upperBound는 포함하지만 lowerBound는 포함하지 않는다. 다만 오른쪽 끝의 경계를 꼭 명시해야 한다.
var sum = 0
for num in 1..<10 {
sum += num
}
// sum = 45
let list = ["A", "B", "C", "D", "E"]
list[..<2] // ["A", "B"]
'Development > Swift' 카테고리의 다른 글
[Swift]연산자 메소드 - Operator Method (0) | 2020.07.15 |
---|---|
[Swift]Swift가 제공하는 연산자들 - Operators in Swift (1) (0) | 2020.07.15 |
[Swift]이름 정의 규칙 - Camel Case (0) | 2020.03.03 |