如何设置,清除,切换和检查一点在 JavaScript?
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.