Khaled Barazi
Khaled Barazi

Reputation: 8741

Why is UInt64 max equal -1 in Swift?

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

Upvotes: 5

Views: 2102

Answers (4)

jd20
jd20

Reputation: 643

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.

Upvotes: -1

Segev
Segev

Reputation: 1297

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.

Upvotes: -2

Brian
Brian

Reputation: 895

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

echo "UInt8(255)" | xcrun swift

will also print -1

Upvotes: 0

mono
mono

Reputation: 4335

I think it is a bug of terminal and playground.

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

Upvotes: 6

Related Questions