F#((*)2)和((<<<)1)的行为不同

Sav*_*xey 3 mapping f# functional-programming bitwise-operators

我有这两段代码:

  • [| 0 .. N-1 |] |> Array.map((<<<)1)

  • [| 0 .. N-1 |] |> Array.map((*)2)

我认为他们做的事情完全相同,但事实并非如此.在第一种情况下,我得到1, 2, 4并在第二 - 0, 2, 4.我不明白为什么有1第一种情况?如果我写let a = 0 <<< 1,我明白0.这是一个错误吗?谢谢!

Gus*_*Gus 8

争论不是你想的顺序,而是相反的.

比较它:

let a = 1 <<< 0 // this is equivalent to ((<<<)1) 0
Run Code Online (Sandbox Code Playgroud)

带括号的运算符后面的第一个参数是左参数,而不是右参数.