JavaScript - 读取位值,单个位是开 (1) 还是关 (0)?

JavaScript - Read Bit Value, is single Bit On (1) or Off (0)?

在 JavaScript 中,我如何知道单个位是打开 (1) 还是关闭 (0)?

function isBitOn(number, index)
{
  // ... ?
}

// Example:
let num = 13; // 1101

isBitOn(num, 0); // true   1
isBitOn(num, 1); // false  0
isBitOn(num, 2); // true   1
isBitOn(num, 3); // true   1

我知道在 JavaScript 中我们有 Bitwise Operations。但是我如何使用它们或使用任何其他方法读取单个位?

JavaScript 保留了 C 二元运算符的传统。您使用 "index" 将值 1 向左移动,然后将结果与您感兴趣的数字相加:

function isBitOn(number, index) {
  return Boolean(number & (1 << index));
}
console.log(isBitOn(13, 0));
console.log(isBitOn(13, 1));
console.log(isBitOn(13, 2));
console.log(isBitOn(13, 3));
console.log(isBitOn(13, 4));
console.log(isBitOn(13, 5));
console.log(isBitOn(13, 6));

请注意,这是按位 & 运算符,而不是 && 短路逻辑运算符。

另请注意,这些运算符将数字视为 32 位整数,因此它不适用于非常大的数字。

将数字转换为二进制,然后检查位:

function isBitOn(number, index) {
  let binary = number.toString(2);
  return (binary[(binary.length - 1) - index] == "1"); // index backwards
}

let num = 13; // 1101

console.log(isBitOn(num, 0));
console.log(isBitOn(num, 1));
console.log(isBitOn(num, 2));
console.log(isBitOn(num, 3));