Using Swift, wether in terminal or playground, when I enter the following on a new line:
UInt64.max
I get a result value of -1.
Is this a bug?
Edit: Examples
$ xcrun swift
Welcome to Swift! Type :help for assistance.
1> UInt64.max / 2
$R1: UInt64 = 9223372036854775807
2> UInt64.max / 2 + 1
$R2: UInt64 = -9223372036854775808
3> UInt64.max
$R3: UInt64 = -1
4> println(UInt64.max / 2)
9223372036854775807
5> println(UInt64.max / 2 + 1)
9223372036854775808
6> println(UInt64.max)
18446744073709551615
I think it is a bug of terminal and playground.
But, the output of the println is correct(18446744073709551615) in both terminal and playground.
Looks like the same bug I've run into with any unsigned type.
echo "UInt8(255)" | xcrun swift
will also print -1
It's because your processor is of 64 bit and UInt is 64 bit * 2. The type Int can't run this number, it's out of range.
This is still a bug, even with the REPL in Swift 2.2. See https://bugs.swift.org/browse/SR-1007 or https://bugs.swift.org/browse/SR-1138.
Fixed in Playgrounds with XCode 7.3 though.
来源:https://stackoverflow.com/questions/24218918/why-is-uint64-max-equal-1-in-swift