2016-08-30 1 views
0

スカラ値クラスを使用して符号なし変数を作成するためのきれいな方法はありますか?スカラ値クラスを使用する符号なし変数

case class Size(val size: Int) extends AnyVal { 
.... 
    } 
+1

https://github.com/scala/scala.github.com/pull/548 – sjrd

+0

あなたはこのような何かしたいです: 'ケースクラスのサイズ(サイズ:INT){defの符号なし= IF(サイズ< 0)-size else size};サイズ(-1).unsigned // 1' – Samar

+0

サイズ<0の場合にエラーが発生するようにするにはもっと必要ですが、このようにしましたがエラーが発生します。この文は値クラスでは許可されていません。 'case class Size(val size:Long)は、AnyValを拡張します。{ (size <0)throws new IllegalArgumentException; def +(s:サイズ):サイズ=サイズ(サイズ+サイズ) } –

答えて

0

これらの事実はあなたの質問を理解するのに役立ちます。 2の補数で

  1. (すべての数は4ビットであると仮定し、より良い説明のために、[0、15]から符号なしの範囲は、[-8、7]の範囲に署名した)、いくつかの数のような同じ-5ように11と27とは、ここで同じ意味だけでなく、彼らの表現は同じであるが、その業務:

    -5 + 10 = 5 
    11 + 10 = 5 
    
  2. (UN)との差が署名し、2の補数は何ですか? (un)符号付き数はオーバーフローを処理する必要があり、bu 2の補数はオーバーフローを処理する必要があります。

    7 + 1 = throw OverflowException 
    -8 - 1 = throw OverflowException 
    
  3. jvmの数は符号も符号もなく、2の補数です。 jvmはトリガされたときにオーバーフローをスローしないので、2の補数であり、符号なしの数ではありません。

  4. 署名付きと署名なしの違いは何ですか?

    それらが異なる条件下でオーバーフロー:彼らは異なる印刷さ

       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) ... 
} 
関連する問題