F#中的位移

问题描述 投票:0回答:1

我是F#的新手,我不了解F#中的移位是如何工作的。

我在fsi中尝试了以下命令。

> 4
- |>((<<<) 1uy);;

屏幕截图如下。

enter image description here

为什么这个结果是16uy但不是8uy?

甚至当我尝试下面的命令时,我也更加困惑,因为结果是48uy ...

> 4
- |>((<<<) 3uy);;

您能形容我这是如何工作的吗?

f# bit-shift
1个回答
1
投票

来自the documentation

按位左移运算符。 结果是第一个操作数,其位向左移第二个操作数中的位数。移出最高有效位的位不会旋转到最低有效位。最低有效位用零填充。第二个参数的类型是int32。

自从我使用F#已经有一段时间了,但是假设它的运算符前缀像Haskell的那样起作用,那么您的使用方式:

4 |> ((<<<) 1uy)

将将1作为左手参数,将4作为右手参数:

1 <<< 4

将是16

要使其等于8,请尝试删除运算符本身周围的括号(这意味着它不会被加上前缀,而只是部分应用了右手参数):

4 |> (<<< 1uy)

并且假定它是有效的F#语法,这应该给您8

© www.soinside.com 2019 - 2024. All rights reserved.