What is Bitmasking in JavaScript?
Last Updated :
20 Jun, 2024
Bitmasking in JavaScript refers to the manipulation and usage of bitwise operators to work with the binary representations of numbers and It is a technique commonly used to optimize certain operations and save memory in various algorithms Bitwise operators in JavaScript operate on individual bits of binary representations of the numbers rather than their decimal representations.
The numbers are represented in binary form, which consists of 0s and 1s. Bitmasking allows you to manipulate specific bits of these binary representations using bitwise operators like AND, OR, XOR, NOT, left shift, and right shift.
Representing a set of binary flags
This approach is commonly used to represent sets of flags where each flag can be either on or off.
Example: This example shows the use of the above-explained approach.
JavaScript
const flagA = 4;
const flagB = 3;
const flagC = 2;
const geek = flagA | flagB;
const isFlagAPresent = (geek & flagA) !== 0;
const isFlagCPresent = (geek & flagC) !== 0;
console.log(`Combined Flags: ${geek.toString(3)}`);
console.log(`${isFlagAPresent}`);
console.log(`${isFlagCPresent}`);
OutputCombined Flags: 21
true
true
Optimizing memory
You can use bit masking to store multiple boolean values in a single integer and save memory when dealing with large collections.
Example: This example shows the use of the above-explained approach.
JavaScript
const item = [true, false, true, true, false, true, false];
let bitmask = 0;
for (let i = 0; i < item.length; i++) {
if (item[i]) {
bitmask |= 1 << i;
}
}
const geek = (bitmask & (1 << 2)) !== 0;
console.log("Bitmask:", bitmask);
console.log(geek);
Checking the presence or absence of elements
You can use bit masking to check the presence or absence of specific elements in a collection.
Example: This example shows the use of the above-explained approach.
JavaScript
const geek = [2, 8, 13, 9, 7, 13];
let bitmask = 0;
for (let i = 0; i < geek.length; i++) {
bitmask |= 1 << geek[i];
}
const numberToCheck = 6;
const isNumberPresent =
(bitmask & (1 << numberToCheck)) !== 0;
console.log(isNumberPresent);