Scala的Int >>(x: Int)方法及其示例
在Scala中,Int类型有一个位运算符>>(x: Int),可以将该整数的二进制数向右移动x个位。这个操作实际上就是将整数的二进制表示中的每个数字向右移动x位,并将最高位的数字用0替换。例如:
val a = 5 // 二进制表示为 101
val b = a >> 1 // 右移1位后为 010,即2
val c = a >> 2 // 右移2位后为 001,即1
val d = a >> 3 // 右移3位后为 000,即0
可以看到,右移运算会丢失掉整数二进制表示的最高位,因此如果原来的整数是负数,那么右移运算会导致结果出现问题。例如:
val e = -5 // 二进制表示为 11111111111111111111111111111011,即补码表示
val f = e >> 1 // 右移1位后为 11111111111111111111111111111101,即补码表示的 -3
结果出现了错误,因为右移操作导致补码表示的高位数字被0替换,而这个负数的补码表示的最高位是1。为了解决这个问题,Scala提供了一个无符号右移运算符>>>,可以将整数的二进制表示向右移动x位,并用0替换掉最高位数字。例如:
val g = -5 // 二进制表示为 11111111111111111111111111111011,即补码表示
val h = g >>> 1 // 无符号右移1位后为 01111111111111111111111111111101,即 2147483645
这样就可以正确地对负数进行右移操作了。
阅读更多:Scala 教程
结论
Scala中的Int类型提供了位运算符>>和>>>,可以对整数进行向右移动位数的操作,但需要注意符号位的影响。
极客笔记