我是新来的斯卡拉。我遇到一个奇怪的事实,这是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