如何在 JavaScript 中设置、清除和切换一个位?

如何设置,清除,切换和检查一点在 JavaScript?

65205 次浏览

To get a bit mask:

var mask = 1 << 5; // gets the 6th bit

To test if a bit is set:

if ((n & mask) != 0) {
// bit is set
} else {
// bit is not set
}

To set a bit:

n |= mask;

To clear a bit:

n &= ~mask;

To toggle a bit:

n ^= mask;

Refer to the Javascript bitwise operators.

I want to add some things (with thanks to @cletus)

function bit_test(num, bit){
return ((num>>bit) % 2 != 0)
}


function bit_set(num, bit){
return num | 1<<bit;
}


function bit_clear(num, bit){
return num & ~(1<<bit);
}


function bit_toggle(num, bit){
return bit_test(num, bit) ? bit_clear(num, bit) : bit_set(num, bit);
}

I built a BitSet class with the help of @cletus information:

function BitSet() {
this.n = 0;
}


BitSet.prototype.set = function(p) {
this.n |= (1 << p);
}


BitSet.prototype.test = function(p) {
return (this.n & (1 << p)) !== 0;
}


BitSet.prototype.clear = function(p) {
this.n &= ~(1 << p);
}


BitSet.prototype.toggle = function(p) {
this.n ^= (1 << p);
}

Get Bit

function getBit(number, bitPosition) {
return (number & (1 << bitPosition)) === 0 ? 0 : 1;
}

Set Bit

function setBit(number, bitPosition) {
return number | (1 << bitPosition);
}

Clear Bit

function clearBit(number, bitPosition) {
const mask = ~(1 << bitPosition);
return number & mask;
}

Update Bit

function updateBit(number, bitPosition, bitValue) {
const bitValueNormalized = bitValue ? 1 : 0;
const clearMask = ~(1 << bitPosition);
return (number & clearMask) | (bitValueNormalized << bitPosition);
}

Examples has been taken from JavaScript Algorithms and Data Structures repository.