Есть ли опрятный способ создания неподписанной переменной с использованием классов значений scala?Неподписанная переменная с использованием классов значений scala
case class Size(val size: Int) extends AnyVal {
....
}
Есть ли опрятный способ создания неподписанной переменной с использованием классов значений scala?Неподписанная переменная с использованием классов значений scala
case class Size(val size: Int) extends AnyVal {
....
}
Эти факты могут помочь вам понять ваш вопрос. (Для лучшего объяснения, предположим, что все числа 4-бит, без знака диапазоны от [0, 15], подписанный находится в диапазоне от [-8, 7])
В 2-х в дополнение, некоторое число такое же, как -5 и 11 и 27 и так далее, здесь же не только означает, что их представления являются одинаковыми, но и их операции:
-5 + 10 = 5
11 + 10 = 5
Что разница между (не) Подписана и 2 дополнением? (un) подписанный номер должен обрабатывать переполнение, дополнение bu 2 - нет.
7 + 1 = throw OverflowException
-8 - 1 = throw OverflowException
Количество JVM не подписано и не подписано, это 2 дополнение. jvm не вызывает переполнения при срабатывании, поэтому они являются дополнением 2, а не (un) подписанными номерами.
В чем разница между подписанным и неподписанным?
Они переливаться при различных условиях:
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) ...
}
https://github.com/scala/scala.github.com/pull/548 – sjrd
вы хотите что-то вроде этого: 'случай класс Размер (размер: Int) {Защиту без знака = если (размер < 0) - размер другого размера}; Размер (-1) .unsigned // 1' – Samar
Мне это нужно больше, чтобы иметь ошибку, если размер <0, я сделал это так, но я получаю ошибку: этот оператор не допускается в классе значений. 'case class Size (val size: Long) extends AnyVal { if (size <0) throw new IllegalArgumentException; def + (s: Размер): Размер = Размер (размер + s.size) } ' –