3

Kotlin 语言中 a.shr(b) 和 a.ushr(b) 函数的区别。使用这两个函数时,我得到相同的输出,所以请帮助了解这些函数之间的区别

4

1 回答 1

8
  • shr将您的位向右移动
  • ushr也右移,但用零填充最左边的位

如果您只对正值进行位移,则没有区别。如果你也在负值上做这件事,那会有很大的不同。

                 Int          Binary
                 -63532       11111111111111110000000000000100    
-63532 ushr 1    2147450882   01111111111111111000000000000010
-63532 shr 1     -32766       11111111111111111000000000000010
                              ^
                              |
                          Difference

在这种情况下,ushr将翻转最左边的位,因此您现在拥有一个正值。

于 2020-08-03T16:27:01.910 回答