2014-06-14 59 views
4

使用斯威夫特,閹羊在終端或操場上,當我進入一個新行:爲什麼在Swift中UInt64 max等於-1?

UInt64.max 

我得到-1的結果值。

這是一個錯誤?


編輯:例子

$ 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 
+0

你如何檢查返回值? – dasblinkenlight

+0

我的意思是在遊樂場線或Swift終端中輸入 - 更新的問題。 – Spectravideo328

+0

我認爲這是操作系統實現中的一個錯誤:它們將它重新解釋爲其他東西(無論是有符號的int64還是int32)。你爲'UInt64.max/4'獲得什麼? – dasblinkenlight

回答

6

我認爲這是終端和操場上的錯誤。

但是,終端和遊樂場中println的輸出是正確的(18446744073709551615)。

0

看起來像我遇到過與任何無符號類型相同的錯誤。

echo「UInt8(255)」| xcrun迅速

還將打印-1

+0

這似乎是在Swift 2.1.1中修復的:'echo「UInt8(255)」| xcrun swift'現在輸出'$ R0:UInt8 = 255' –

+0

或可選:'echo「UInt8.max」| xcrun' swift現在輸出$ R0:UInt8 = 255 –

-1

這是因爲你的處理器是64位和uint是64位* 2 int類型不能運行這個數字,這是超出範圍。