Scala 按位右移,长不等于零?

Scala 按位右移,长不等于零?,scala,Scala,我在REPL中玩,我看到了和>的这种行为。似乎一个Long应该占用64位,所以按64右移应该总是将数字置零 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 res2

我在REPL中玩,我看到了
>
的这种行为。似乎一个Long应该占用64位,所以按
64
右移应该总是将数字置零

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中的这种行为是什么

Scala取右手并按左手操作数的字大小应用它。对于
Int
,使用右边的值32、64和128可以得到相同的结果

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

Scala取右手并按左手操作数的字大小对其进行模化。对于
Int
,使用右边的值32、64和128可以得到相同的结果

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

64
的二进制是
1000000

你必须右移(7到31)才能得到0

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
中相同的
64
的二进制文件是
1000000

你必须右移(7到31)才能得到0

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

中,您询问
Long
值,但示例使用
Int
。你能澄清你的问题吗?不管怎样,行为似乎都是一样的?我使用的是scala 2.11.7 fwi,无论如何都是一样的
scala>64l>>64l=64
您询问的
Long
值,但您的示例使用的是
Int
。你能澄清你的问题吗?不管怎样,行为似乎都是一样的?我使用的是scala 2.11.7 fwi,反正都一样
scala>64l>>64l=64
Hmm,这是scala独有的还是Java中的相同行为?我不知道this@ChrisStewartJava也是如此。我觉得Scala版本很有可能只是在使用Java功能,但我不知道。嗯,这是Scala独有的还是Java中的相同行为?我不知道this@ChrisStewartJava也是如此。我觉得Scala版本很有可能只是在使用Java功能,但我不知道。