我试图理解Javascript中的按位操作是如何工作的,特别是当用作条件结果时。
const number = 19
if(number & 1) {
console.log('one')
}
if(number & 2) {
console.log('two')
}
if(number & 4) {
console.log('four')
}
if(number & 8) {
console.log('eight')
}
if(number & 16) {
console.log('sixteen')
}
// one two sixteen
if(number & 1 === 1) {
console.log('one')
}
if(number & 2 === 2) {
console.log('two')
}
if(number & 4 === 4) {
console.log('four')
}
if(number & 8 === 8) {
console.log('eight')
}
if(number & 16 === 16) {
console.log('sixteen')
}
// one two four eight sixteen
代码的第一部分产生了一个二十六个,我希望它是。 但是代码的第二部分产生了一个二四四十六。 数字& 4应该是0,它不应该在这里打印出'4',对于'8'也是如此。我在这里误解了什么?
答案 0 :(得分:3)
您遇到operator precendence问题:===
的优先级高于&
。因此number & 1 === 1
将被评估为number & (1 === 1)
。
要解决您必须添加适当的分组:
(number & 1) === 1
答案 1 :(得分:2)
根据MDN,===
( 10 )的优先级值大于&
( 9 )。这就是19 & 4 === 4
在19 & (4 === 4)
处执行的原因。