2017-11-27 8 views
0

私はREPLでプレイしていましたが、この現象は>>>>>です。 Longが64ビットを占有するように見えるので、64で右にシフトすると、常に数値がゼロになるはずです。長さが0に等しくないビット右シフト?

scala> 64 >> 64 
res22: Int = 64 

scala> 64 >> 65 
res23: Int = 32 

scala> 64 >> 66 
res24: Int = 16 

scala> 64 >> 67 
res25: Int = 8 

scala> 64 >> 68 
res26: Int = 4 

scala> 64 >> 69 
res27: Int = 2 

scala> 64 >> 70 
res28: Int = 1 

scala> 64 >> 71 
res29: Int = 0 

scala> 64 >>> 64 
res30: Int = 64 

scala> 64 >>> 65 
res31: Int = 32 

Scalaではこの動作は何ですか?

+0

あなたは 'Long'値について質問しますが、あなたの例は' Int'を使用します。あなたの質問を明確にすることはできますか? –

+0

動作は関係なく同じですか?私はscalaを使用しています2.11.7 fwiw –

+0

これと同じように 'scala> 64l >> 64l = 64' – prayagupd

答えて

3

Scalaは右手をとり、左手オペランドのワードサイズを法として適用します。あなたは(7〜31)で右シフトしてい64用のバイナリが1000000ある

scala> 64 >> 64 
res0: Int = 64 

scala> 64 >> 1 
res1: Int = 32 

scala> 64 >> 32 
res2: Int = 64 

scala> 8 >> 32 
res3: Int = 8 

scala> 8 >> 64 
res4: Int = 8 

scala> 8 >> 128 
res5: Int = 8 

scala> 64L >> 64 
res6: Long = 64 

scala> 64L >> 32 
res7: Long = 0 
+1

これはScalaにとってもユニークなのでしょうか?私はこれを知らなかった –

+0

@ChrisStewart Javaは同じです。 ScalaのバージョンがJavaの機能を使用している可能性が高いようですが、わかりません。 – puhlen

0

は0を取得するには、32、64および128の右側の値を使用してIntため、同じ結果が得られます。

scala> import java.lang.Long 
import java.lang.Long 

scala> Long.toBinaryString(64) 
res139: String = 1000000 

scala> Long.toBinaryString(64 >> 6) 
res140: String = 1 

scala> Long.toBinaryString(64 >> 7) 
res141: String = 0 

31+は、あなたにも同じ結果が得られます

scala> 64 >> 64 
res1: Int = 64 

scala> 64 >> 32 
res2: Int = 64 

scala> 64 >> 128 
res3: Int = 64 

同じでjava.lang.Longまたはscala.Long

関連する問題