F# 中的位移位运算符被记录为当您将位移动到值的末尾时不进行旋转。您可以在 F# Interactive 中看到这一点:
> 让 a = 128uy - 一个 <<< 1;; val a : 字节 = 128uy 验证它:字节 = 0uy
也就是说,我们将高位移出 128 的顶部,得到 0。
如果 F# 旋转位而不是将它们从末尾移开,我们将得到 1,因为MSB位置的 1 位将向下旋转到LSB。
然而,如果你对第二条语句做一个小的改动,你会得到一个令人惊讶的结果:
> 让 a = 128uy - 一个 <<< 8;; val a : 字节 = 128uy 验证它:字节 = 128uy
现在它看起来已经完成了字节中的位的完整旋转!
为什么是这样?