我想对一个值应用按位运算,如果该值为0则将其变为0;如果该值大于零,则将其变为1。按位运算得到1 if> 0 else 0
具体来说,我想在JavaScript中soultion,围绕Number(Boolean(value))
0 -> 0
1 -> 1
2 -> 1
3 -> 1
4 -> 1
...
办法,我可以为位操作实现这一目标?算术运算也不错。
我想对一个值应用按位运算,如果该值为0则将其变为0;如果该值大于零,则将其变为1。按位运算得到1 if> 0 else 0
具体来说,我想在JavaScript中soultion,围绕Number(Boolean(value))
0 -> 0
1 -> 1
2 -> 1
3 -> 1
4 -> 1
...
办法,我可以为位操作实现这一目标?算术运算也不错。
!!x
是这样做的惯用方式,对于整数类型(包括布尔值)x
。
虽然不是按位('!'是逻辑运算符)。 –
的确,我认为这是“用户不太清楚他们想要的”情况。我太老了,不能使用〜和^。 – Bathsheba
你可能是对的 - 我已经要求澄清评论。 –
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))
你似乎暗示这可能比替代方案慢。
Number
和Boolean
是语言内置程序,它可以执行非常简单的操作,我们预计会非常便宜请注意,您的要求:
把它转化为0,如果值是0,或者如果它大于零
转1 ...做如果x
为负值,则不指定要发生的情况。这个答案可以让你相应地调整。
是否允许算术或逻辑运算符(例如'+'或'!'),还是仅需严格按位运算符? –
算术会很好。 本质上我想要一个更有说服力的方法Number(布尔(值)) – Strernd
已经很好的答案,只是为了好玩:'1-!x''也应该诀窍 –