我是F#的新手,我不了解F#中的移位是如何工作的。
我在fsi中尝试了以下命令。
> 4
- |>((<<<) 1uy);;
屏幕截图如下。
为什么这个结果是16uy但不是8uy?
甚至当我尝试下面的命令时,我也更加困惑,因为结果是48uy ...
> 4
- |>((<<<) 3uy);;
您能形容我这是如何工作的吗?
按位左移运算符。 结果是第一个操作数,其位向左移第二个操作数中的位数。移出最高有效位的位不会旋转到最低有效位。最低有效位用零填充。第二个参数的类型是int32。
自从我使用F#已经有一段时间了,但是假设它的运算符前缀像Haskell的那样起作用,那么您的使用方式:
4 |> ((<<<) 1uy)
将将1作为左手参数,将4作为右手参数:
1 <<< 4
将是16
。
要使其等于8
,请尝试删除运算符本身周围的括号(这意味着它不会被加上前缀,而只是部分应用了右手参数):
4 |> (<<< 1uy)
并且假定它是有效的F#语法,这应该给您8
。