나는 스위프트의 정수로 놀고있다. 이상한 하나를 얻었다 :스위프트 : 최대 두 정수의 합
let uIntMax8 = UInt8.max
let uIntMax16 = UInt16.max
let sumInt32: Int32 = Int32(uIntMax16 + UInt16(uIntMax8))
sumInt32
신속한 나를 위해 sum
을 계산할 수 없습니다. 왜 그럴까요?
나는 스위프트의 정수로 놀고있다. 이상한 하나를 얻었다 :스위프트 : 최대 두 정수의 합
let uIntMax8 = UInt8.max
let uIntMax16 = UInt16.max
let sumInt32: Int32 = Int32(uIntMax16 + UInt16(uIntMax8))
sumInt32
신속한 나를 위해 sum
을 계산할 수 없습니다. 왜 그럴까요?
uIntMax16 + UInt16(uIntMax8)
은 16 비트에 맞지 않기 때문입니다. 을 추가하면에서 UInt16.max
까지 정의상 거의 16 비트를 초과합니다. 추가 작업을 수행하기 전에 두 summands를 모두 UInt32
으로 변환해야합니다.
을 @pjs 답변을 확장하려면 따라서 UInt16.max에 아무 것도 추가하지 않으려는 예외가 발생합니다. –
@purrminator 두 경우 모두 오버플로가 감지되어서 무슨 말을하는지 잘 모르겠습니다. –
pjs의 답은 정확하지만'& +'연산자를 사용하여 오버플로 추가를 강제 할 수 있다고 덧붙이고 싶습니다 : let sumInt32 : Int32 = Int32 (uIntMax16 & + uIntMax16)' –
let uIntMax8 = Int32(UInt8.max)
let uIntMax16 = Int32(UInt16.max)
let sumInt32: Int32 = uIntMax16 + uIntMax8
sumInt32
이 시도 :'하자 sumInt32 : INT32 = INT32 빠른에있는 모든 수학 연산이 오버 플로우 및 범위 검사를 수행하는 기본적으로 (INT32 (uIntMax16) + INT32 (uIntMax8))' – Adam