如果>按位运算得到1 0其他0

时间:2017-06-19 09:09:40

标签: javascript bit-manipulation bitwise-operators

我想对值应用按位运算,如果值为0,则将其设置为0;如果值大于0,则将其设置为1。

具体而言,我希望在JavaScript中使用灵魂,Number(Boolean(value))

0 -> 0
1 -> 1
2 -> 1
3 -> 1
4 -> 1
...

我可以通过按位运算来实现吗? 算术运算也很好。

2 个答案:

答案 0 :(得分:4)

对于整数类型(包括布尔值)insertBefore

!!x是这样做的惯用方法。

答案 1 :(得分:2)

x && 1做到了。

for(x=0; x<5; x++) {
   console.log(x & 1)
}

写入:

0
1
1
1
1

这是一个逻辑AND,但Javascript的类型规则似乎将结果保持为数字。

但你应该考虑有多少JS编码员本能地理解这一点。

优先考虑简洁性,我个人会使用三元运算符:

x == 0 ? 0 : 1

...虽然您要求避免的选项也非常清晰:

Number(Boolean(x))

你似乎暗示这可能比其他选择更慢。

  1. 我认为没有理由这么慢。 NumberBoolean是语言内置函数,可以执行非常简单的操作,我们希望这些操作非常便宜
  2. 过早优化是万恶之源。如果您的代码运行速度慢得令人无法接受,那么您应该只担心这种微优化问题。如果它在循环中运行数百万次,则此操作只会产生这样的效果。如果是这种情况,您可以轻松判断另一个选项是否更便宜,只需尝试一下即可。
  3. 请注意您的要求:

      

    如果值为0则将其变为0;如果值大于零,则将其变为1

    ...如果x为否定,则不会指定您想要发生的事情。这个答案可以让你相应调整。