我想對一個值應用按位運算,如果該值爲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''也應該訣竅 –