Why is UInt64 max equal -1 in Swift?

2020-04-06 15:55发布

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

4条回答
不美不萌又怎样
2楼-- · 2020-04-06 16:25

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.

查看更多
SAY GOODBYE
3楼-- · 2020-04-06 16:29

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

echo "UInt8(255)" | xcrun swift

will also print -1

查看更多
爷的心禁止访问
4楼-- · 2020-04-06 16:36

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.

查看更多
家丑人穷心不美
5楼-- · 2020-04-06 16:37

I think it is a bug of terminal and playground.

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

查看更多
登录 后发表回答