2014-06-08 6 views
1

나는 스위프트의 정수로 놀고있다. 이상한 하나를 얻었다 :스위프트 : 최대 두 정수의 합

let uIntMax8 = UInt8.max 
let uIntMax16 = UInt16.max 
let sumInt32: Int32 = Int32(uIntMax16 + UInt16(uIntMax8)) 
sumInt32 

신속한 나를 위해 sum을 계산할 수 없습니다. 왜 그럴까요?

+1

이 시도 :'하자 sumInt32 : INT32 = INT32 빠른에있는 모든 수학 연산이 오버 플로우 및 범위 검사를 수행하는 기본적으로 (INT32 (uIntMax16) + INT32 (uIntMax8))' – Adam

답변

2

uIntMax16 + UInt16(uIntMax8)은 16 비트에 맞지 않기 때문입니다. 을 추가하면에서 UInt16.max까지 정의상 거의 16 비트를 초과합니다. 추가 작업을 수행하기 전에 두 summands를 모두 UInt32으로 변환해야합니다.

+3

을 @pjs 답변을 확장하려면 따라서 UInt16.max에 아무 것도 추가하지 않으려는 예외가 발생합니다. –

+0

@purrminator 두 경우 모두 오버플로가 감지되어서 무슨 말을하는지 잘 모르겠습니다. –

+0

pjs의 답은 정확하지만'& +'연산자를 사용하여 오버플로 추가를 강제 할 수 있다고 덧붙이고 싶습니다 : let sumInt32 : Int32 = Int32 (uIntMax16 & + uIntMax16)' –

0
let uIntMax8 = Int32(UInt8.max) 
let uIntMax16 = Int32(UInt16.max) 
let sumInt32: Int32 = uIntMax16 + uIntMax8 
sumInt32