是否有一种使用scala值类创建无符号变量的简洁方法?
case class Size(val size: Int) extends AnyVal {
....
}
答案 0 :(得分:0)
这些事实可以帮助您理解您的问题。 (为了更好地解释,假设所有数字都是4位,无符号范围来自[0,15],有符号范围来自[-8,7])
在2的补码中,有些数字相同,如-5和11和27等等,这里的SAME不仅意味着它们的表示相同,而且还表示它们的操作:
-5 + 10 = 5
11 + 10 = 5
(un)签名和2&2补充之间的区别是什么? (un)签名号码应该处理溢出,bu 2的补码不会。
7 + 1 = throw OverflowException
-8 - 1 = throw OverflowException
jvm的数量既不是有符号也不是无符号,它是2的补码。 jvm在触发时不会抛出任何溢出,因此它们是2的补码,而不是(未)签名的数字。
签名和未签名之间的区别是什么?
它们在不同条件下溢出:
Signed Unsigned
7 + 1 overflow 8
-8(7) - 1 underflow 6
0 - 1 -1 underflow
-1(15) + 1 0 overflow
它们的印刷方式不同。
这些事实几乎适用于所有编程语言。
回到你的问题,因为你不会处理溢出,你唯一需要做的就是以不同的方式打印它。
case class Size(val size: Int) extends AnyVal {
override def toString = if (size < 0) ...
}