Битовый сдвиг в F # - PullRequest
       61

Битовый сдвиг в F #

0 голосов
/ 05 апреля 2020

Я новичок в F # и не понимаю, как работает сдвиг битов в F #.

Я попробовал команду ниже в fsi.

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

Снимок экрана как ниже .

enter image description here

Почему этот результат 16uy, а не 8uy?

Даже больше меня смутило, когда я попробовал команду ниже, потому что результат это 48uy ...

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

Не могли бы вы рассказать мне, как это работает?

1 Ответ

1 голос
/ 05 апреля 2020

С документация :

Битовый оператор левого сдвига. Результатом является первый операнд с битами, сдвинутыми влево на количество бит во втором операнде. Биты, сдвинутые из старшей значащей позиции, не повернуты в младшую значащую позицию. Младшие значащие биты дополняются нулями. Тип второго аргумента - int32.

Прошло много времени с тех пор, как я использовал F #, но предполагая, что его префикс оператора работает так же, как Haskell, то, как вы его использовали:

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

будет применять 1 в качестве левого аргумента и 4 в качестве правого аргумента:

1 <<< 4

Что будет 16.

Чтобы получить его равным 8, попробуйте убрать круглые скобки вокруг самого оператора (то есть он не будет иметь префикс, а вместо этого будет лишь частично применен с правым аргументом), чтобы получить:

4 |> (<<< 1uy)

и это должно дать вам 8, при условии, что это правильный синтаксис F #.

...