试图理解为什么这两个功能不相同

时间:2016-01-28 01:14:26

标签: javascript bit-shift

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

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

//incorrect output
let y = 13;
var b = 0;

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

1 个答案:

答案 0 :(得分:2)

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