Javascript 试图理解为什么这两个函数不相等

Javascript 试图理解为什么这两个函数不相等,javascript,bit-shift,Javascript,Bit Shift,我正在研究javascript中的一些位移位,并试图理解为什么这两个位移位函数不等价。目的是计算一个字节中的设置位数 // correct output let x = 13; for (var c = 0; x; x >>= 1) { c += x & 1; } // outputs: c === 3 以及: //输出不正确 设y=13; var b=0; for(设i=0;i>=1; b+=y&1; } //输出:b==2 在将位添加到b之前,不正确的版本会在y>=

我正在研究javascript中的一些位移位,并试图理解为什么这两个位移位函数不等价。目的是计算一个字节中的设置位数

// correct output
let x = 13;
for (var c = 0; x; x >>= 1) {
  c += x & 1;
}
// outputs: c === 3
以及:

//输出不正确
设y=13;
var b=0;
for(设i=0;i<4;i++){
y>>=1;
b+=y&1;
}
//输出:b==2

在将位添加到b之前,不正确的版本会在
y>=1中的初始y中删除最右边的位(因此,当y为12时,会给出正确的结果)。

在将位添加到b之前,不正确的版本会在
y>=1中的初始y中删除最右边的位(当y为12时,会给出正确的结果).

这个问题是没有意义的。如果你说为什么你认为它们应该相等,也许会有帮助?@self sorry,为什么这是没有意义的?@JK因为它们重复相同的次数,在非工作版本中,移位是在循环中完成的,而不是“for”声明。他们应该做同样的事情。这个问题是荒谬的。如果你说为什么你认为他们应该是等价的,也许会有所帮助?@self sorry,为什么这是荒谬的?@JK因为他们重复了相同的次数,在非工作版本中,移位是在循环中完成的,而不是“for”声明。他们应该做同样的事情。所以只需交换第二个循环中两个语句的顺序。谢谢大家!好的,我知道问题出在哪里了。所以只需交换第二个循环中两个语句的顺序。谢谢大家!好的,我知道问题出在哪里了。
//incorrect output
let y = 13;
var b = 0;

for (let i = 0; i < 4; i++) {
  y >>= 1;
  b += y & 1;
}
// outputs: b === 2