래핑된 연산자 사용하기

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

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과 같습니다.