5

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
Jukka Suomela
  • 12,070
  • 6
  • 40
  • 46
Khaled Barazi
  • 8,681
  • 6
  • 42
  • 62

4 Answers4

6

I think it is a bug of terminal and playground.

But, the output of the println is correct(18446744073709551615) in both terminal and playground.

mono
  • 4,340
  • 3
  • 21
  • 49
0

Looks like the same bug I've run into with any unsigned type.

echo "UInt8(255)" | xcrun swift

will also print -1

Brian
  • 772
  • 1
  • 13
  • 31
-1

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.

jd20
  • 633
  • 7
  • 11
-2

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.

Segev
  • 1,267
  • 16
  • 21