我是新來的斯卡拉。我遇到一個奇怪的事實,這是Byte
類型可以包含-128,但不是128斯卡拉字節類型可以包含-128但不是128
scala> val overflow1NegByte = -129:Byte
<console>:11: error: type mismatch;
found : Int(-129)
required: Byte
val overflow1NegByte = -129:Byte
^
scala> val overflow1NegByte = -128:Byte
overflow1NegByte: Byte = -128
scala> val overflow1PosByte = 128:Byte
<console>:11: error: type mismatch;
found : Int(128)
required: Byte
val overflow1PosByte = 128:Byte
^
scala> val overflow1PosByte = 127:Byte
overflow1PosByte: Byte = 127
顯然,它認爲,以表示負數,則使用第一個標誌。對於正數,該標誌也被保留。這是可以理解的。但是,爲什麼多一個負數比正數多。
一個非常簡單的答案:既-128和128你有2 * 128 + 1 = 257號(包括0)你想擠進上te,它只有8位,即256個組合。所以你必須犧牲128或-128。爲什麼128?這是一個更長的故事。 –
轉到REPL並在每個整型類型Byte,Short,Int和Long上調用MinValue和MaxValue。 (換句話說,'Byte.MinValue','Byte.MaxValue','Short.MinValue'等等)你會看到這個模式是一致的。 – jwvh