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

时间:2014-06-16 20:54:58

标签: f# functional-programming mapping 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。这是一个错误吗? 谢谢!

1 个答案:

答案 0 :(得分:8)

参数不是你想的顺序,反之亦然。

将其与:

进行比较
let a = 1 <<< 0 // this is equivalent to ((<<<)1) 0

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