티스토리 뷰
기본연산자 외에 Swift에서는 더 복잡한 값을 조작할 수 있는 고급연산자를 제공합니다.
비트 연산자 (Bitwise Operators)
비트연산자를 사용하면 데이터 구조 내에서 개별 원시 데이터 비트를 조작할 수 있습니다.
그래픽 프로그래밍, 디바이스 드라이버 생성과 같은 Low-level 프로그래밍에 자주 사용됩니다.
Swift는 C에서의 모든 비트연산자를 지원합니다.
비트 NOT 연산자 (Bitwise NOT operator)
( ~ ) 키워드를 사용하여, 비트 값(2진수)을 반대로 바꿔줍니다.
예시
let initialBits: UInt8 = 0b00001111 // 15
let invertedBits = ~initialBits // 240
// 1110000 (2진수) -> 240 (10진수)
비트 AND 연산자 (Bitwise AND operator)
( & ) 키워드를 사용하여, 두 숫자의 비트를 합칩니다.
입력된 숫자 위치가 둘다 1이면 1을 설정하는 새로운 숫자를 반환 합니다.
예시
let firstSixBits: UInt8 = 0b11111100 // 252
let lastSixBits: UInt8 = 0b00111111 // 63
let middleFourBits = firstSixBits & lastSixBits
// 00111100 (2진수) -> 60 (10진수)
비트 OR 연산자 (Bitwise OR operator)
( | ) 키워드를 사용하여, 두 숫자의 비트를 비교하고 하나라도 비트가 1이면 1을 설정하는 새로운 숫자를 반환 합니다.
예시
let someBits: UInt8 = 0b10110010
let moreBits: UInt8 = 0b01011110
let combinedbits = someBits | moreBits
// 11111110 -> 254
비트 XOR 연산자 (Bitwise XOR operator)
( ^ ) 키워드를 사용하여, 두 숫자의 비트가 같으면 0을, 다르면 1을 설정하는 새로운 숫자를 반환합니다.
예시
let firstBits: UInt8 = 0b00010100 // 20
let otherBits: UInt8 = 0b00000101 // 5
let outputBits = firstBits ^ otherBits
// 00010001 -> 17
비트 이동 연산자 (Bitwise Left and Right shift operator)
( << ) 와 ( >> ) 의 키워드를 사용하여, 왼쪽 또는 오른쪽으로 숫자의 모든 비트를 이동 시킵니다.
비트 왼쪽으로 이동 | 비트 오른쪽으로 이동 |
기존값 x2 | 기존값 ÷ 2 |
부호 없는 정수에서 비트 이동 동작 순서
- 기존 비트는 요청된 숫자만큼 왼쪽, 오른쪽으로 이동
- 정수의 저장소 범위를 넘어 이동된 비트는 삭제
- 비트가 이동한 후 뒤에 남겨진 공백에는 0이 삽입
예시
let shiftBits: UInt8 = 4 // 00000100 in binary
shiftBits << 1 // 00001000 -> 8
shiftBits << 2 // 00010000 -> 16
shiftBits << 5 // 10000000 -> 128
shiftBits << 6 // 00000000 -> 0
shiftBits >> 2 // 00000001 -> 1
부호있는 정수에 대한 이동 동작 (Shifting Behavior for Signed Integers)
양수인지 음수인지 나타내기 위해 부호 비트(sign bit)로 알려진 첫번째 비트를 사용합니다.
값 비트(value bits)로 알려진 남아있는 비트는 실제 값을 저장합니다.
부호비트
0 이면 양수,
1 이면 음수를 나타냅니다.
위의 그림에서 부호비트는 0이므로 양수, 7개의 값 비트는 4를 나타냅니다.
-4를 표기하자면 아래와 같습니다.
부호 있는 정수에서 Shift
음수는 2의 보수로 나타냅니다.
- 1의 보수 -> 전부 반전 후
- 2의 보수 -> 1을 더합니다.
ex) 4 = 00000100
-> 1의 보수 11111011
-> 2의보수 (+1) 11111100
-> -4
2의보수를 사용하게되면 부호비트는 그냥 두고 나머지 자리로 이진 덧셈을 하고 int 크기를 벗어나는 것만 자르면 됩니다.
'iOS' 카테고리의 다른 글
[Combine] 개념 (0) | 2022.10.13 |
---|---|
[Swift] fatal Error (4) | 2022.09.25 |
[Swift] 접근제어 (Access Control) (0) | 2022.09.17 |
[iOS] Scroll top (스크롤바 최상단 이동) (0) | 2022.09.14 |
[Swift] 안전하게 배열 조회 (feat: indices) (0) | 2022.09.05 |
- Total
- Today
- Yesterday
- Swift 프로퍼티
- Swift ModernRIBs
- swift programmers
- Swift final
- Combine: Asynchronous Programming with Swift
- iOS error
- 원티드 프리온보딩
- swift (programmers)
- Class
- swift 고차함수
- swift property
- Swift Leetcode
- RIBs tutorial
- Swift 내림차순
- Swift joined()
- ios
- Swift 프로그래머스
- Swift
- removeLast()
- swift reduce
- Swift inout
- swift protocol
- Swift Error Handling
- Swift 알고리즘
- Swift init
- 2023년 회고
- Swift joined
- RTCCameraVideoCapturer
- CS 네트워크
- Swift RIBs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |