代码之家  ›  专栏  ›  技术社区  ›  Gil Epshtain

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

  •  0
  • Gil Epshtain  · 技术社区  · 4 年前

    在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
    

    Bitwise Operations

    2 回复  |  直到 4 年前
        1
  •  2
  •   Gil Epshtain    4 年前

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

    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));
        2
  •  1
  •   Pointy    4 年前

    JavaScript保留了C二进制运算符的传统。您可以使用“索引”将值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位整数,因此不能用于非常大的数字。