Sample 레슨Sample 레슨

래핑된 연산자 사용하기

스위프트의 정수 기본 연산자는 오버플로 버그를 없애기 위해 항시 오버플로 확인을 수행합니다. 만약에 높은 성능이 필요한 상황이고, 오버플로의 발생 가능성이 없다고 판단한다면 이런 오버플로 확인은 의미없는 비용이 될 뿐입니다. 이런 경우에는 래핑된 정수 산술식을 활용하는 것이 성능에 좋습니다.

let lhs: [Int] = [ ... ]
let rhs: [Int] = [ ... ]
var sum: [Int] = [ ... ]

// lhs와 rhs의 모든 요소가 오버플로 요소가 없고, 
// lhs[i] + rhs[i]의 결과가 오버플로가 없다고 확신한다면 
// 오버플로 확인을 생략한 &+ 연산자를 사용하여 성능을 개선할 수 있습니다
for i in 0...n {
    sum[i] = lhs[i] &+ rhs[i]
}

&+, &-, &* 연산자는 오버플로가 발생하면 최상위 비트를 버립니다. 그래서 Int.max &+ 1의 결과값은 Int.min과 같습니다.