JavaScript 从左边设置位

JavaScript set bits from the left

我有一个号码,例如128。它的位表示是10000000。 我想将左边的第 3 位设置为 10100000 (160).

我认为我可以这样做:

var foo = 128;
foo = foo | 1 << 2;

但这给了我 13210000100。它设置了右起第3个! 如何设置从左边到0或1?

试试这个。 >> 将从右移开始工作

var foo = 128;
foo = foo | foo >> 2;

Refrence for Bitwise operators

这有效:

var foo = 128;
foo = foo | foo >> 2

但是如果你想打开和关闭它呢?

var foo = 128;
var mask = foo >> 2;

// Flick the bit on
foo = foo | mask;
// foo now equals 160

// Set the bit back to 0
foo = foo & ~mask;
// foo equals 128 again

function transformBits(bits, order, target) {
  var bitStr = bits
    .toString(2)
    .split('')
    .map(function(value, index) { 
      return index == (order - 1) ? target : value; 
    })
    .join('');

  return parseInt(bitStr, 2);
}

document.writeln(transformBits(128, 3, 1));
document.writeln(transformBits(128, 3, 0));