์ฝ๋ฉํ ์คํธ์์ ํ ์คํธ์ผ์ด์ค๋ ๋ค ๋ง์๋๋ฐ ํ๋ ์ผ์ด์ค์์ ๋ค ๋ฐํ์ ์๋ฌ๋ฅผ ๋ด๋ฒ๋ฆฐ ๊ฒฝํ!!!!!์ด ์๋ค..
ํ ์ผ๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ๋งํ์ผ๋๊น,, ์ผ๋จ ๋ค์๋ฌธ์ ๋ก ๋์ด๊ฐ๋ค๊ฐ ๋ค์ ํด๋น ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ๋๋ฐ,
10๋ถ๋ ์ฑ ๋จ์ง ์์ ์ํ์ฌ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๊ฐ ์๋๋ง ์๊ฐํ๋ค๊ฐ ์ํ์ด ์ข ๋ฃ๋์๋ค.
ํ ์คํธ๊ฐ ๋๋ ํ ์ป์ผ๋ฉด์ ์๊ฐ์ ํ๋๋ฐ, ์๋ฃํ์ ๊ณ ๋ คํ์ง ๋ชปํด์ ์๋ฌ๋ ๊ฒ ๊ฐ๋ค!!!๋ผ๋ ์๊ฐ์ ๊ทธ์ ์์ผ ํ๋ค.
ํด๋น ๋ฒ์๊ฐ -10^9 ~ 10^9 ์ด์๋๋ฐ,, ์ฐ์ ํ ๋ ๋ฒ์๋ฅผ ๊ณ ๋ คํ์ด์ผ ์์ ํ์๊ฒ ๋ค๋ ์๊ฐ...
Int ์๋ฃํ์ ๋ํด ๋จธ๋ฆฌ์ ๋ฃ์ด๋์ผ ๋ ์ค์๋ฅผ ์ํ ๊ฒ ๊ฐ์์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค ! ๐ฅ
๋ค๋ค ์์๊ฒ ์ง๋ง !
Int ๋ค์ ๋ถ์ ์ซ์๋ ๋นํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ค์ํํธ์์์ Int๋ Int8, Int16, Int32, Int64๋ฅผ ์ง์ํฉ๋๋ค.
Int ํ์ ๋ค์ ๋ฒ์
print("Int8 : " + String(Int8.min) + " ~ " + String(Int8.max))
print("Int16 : " + String(Int16.min) + " ~ " + String(Int16.max))
print("Int32 : " + String(Int32.min) + " ~ " + String(Int32.max))
print("Int64 : " + String(Int64.min) + " ~ " + String(Int64.max))
- Int8 : -128 ~ 127
- Int16 : -32768 ~ 32767
- Int32 : -2147483648 ~ 2147483647
- Int64 : -9223372036854775808 ~ 9223372036854775807
๋นํธ๋ฅผ ๋ช ์ํ์ง ์์ Int
๋นํธ๋ฅผ ๋ช ์ํ์ง ์๋ Int๋ ์์คํ ์ ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง์ ๋๊ณ , ํ๋ซํผ์ ๋ฐ๋ผ 32๋นํธ ๋๋ 64๋นํธ๋ก ๊ตฌํ๋ฉ๋๋ค.
์์ฆ ๋๋ถ๋ถ์ ํ๋ซํผ์์๋ Int๊ฐ 64๋นํธ ์ ์๋ก ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์, ๋งค์ฐ ํฐ ์ซ์๋ฅผ ๋ค๋ฃฐ ์ ์๋ ๊ฒ์ ๋๋ค!
์๋์ ์ด๋ฏธ์ง์ฒ๋ผ, ์ ๋งฅ์์๋ Int์ ๋ฒ์๊ฐ Int64์ ๋ฒ์์ ๋์ผํ๊ฒ ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Int ์ค๋ฒํ๋ก์ฐ ๋ ์์๋ณด๊ธฐ - &+ &- &* ์ฐ์ฐ์
์ฐพ์๋ณด๋ฉด์ ์ต๋๊ฐ์ ๋์์ ๊ฒฝ์ฐ์ ์ค๋ฒํ๋ก์ฐ ์์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ๊ถ๊ธํด์ ธ์ ์ฐพ์๋ดค์ต๋๋ค.
ํ๋จ์ ์ฝ๋๊ณผ ๊ฐ์ด max๊ฐ, min๊ฐ์ ๋ฒ์๋ฅผ ๋์ด์๋ฉด ์ค๋ฒํ๋ก์ฐ๊ฐ ๋๊ฒ ๋๋๋ฐ,
let maxInt = Int.max
let minInt = Int.min
// ์ค๋ฒํ๋ก์ฐ ๋ฐ์ (์ปดํ์ผ ์๋ฌ ๋ฐ์)
let overflowInt = maxInt + 1
let underflowInt = minInt - 1
Swift์์๋ &+, &-, &* ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํ์ฉํ๋ ์ฐ์ฐ์ ํ ์ ์์ต๋๋ค.
์ด๋ ์๋์ผ๋ก ๋ฒ์๋ฅผ ์ํํ๊ฒ ๋์ด ์ต๋๊ฐ์ + 1ํ๋ ๊ฒฝ์ฐ์ ์ต์๊ฐ์ผ๋ก ์ํํ๊ณ ,
์ต์๊ฐ์ -1 ํ๋ ๊ฒฝ์ฐ์ ์ต๋๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋์ด ์ฐ์ฐ์ ์ด์ด๋๊ฐ๊ฒ ๋ฉ๋๋ค.
print(Int.max)
print(Int.max &+ 1)
print(Int.min)
print(Int.min &- 1)
Int ์ค๋ฒํ๋ก์ฐ ๋ ์์๋ณด๊ธฐ - addReportingOverflow ๋ฉ์๋
Swift์๋ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํ์ธํ ์ ์๋ ๋ฉ์๋๋ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด addReportingOverflow๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ๋ ์ํ๋ ๊ฐ์ ๋ฐํํ ์ ์์ต๋๋ค.
let maxInt = Int.max
let valueToAdd = 5
let (result, overflow) = maxInt.addingReportingOverflow(valueToAdd)
let finalResult = overflow ? Int.max : result
print(finalResult) // 9223372036854775807 (Int.max)