代码之家  ›  专栏  ›  技术社区  ›  Alexander Mills

获取整数的二进制表示

  •  2
  • Alexander Mills  · 技术社区  · 7 年前

    // 5 % 2 = 1
    // 5 / 2 = 2
    // result = 1;
    
    // 2 % 2 = 0
    // 2 / 2 = 1
    // result = 10
    
    // 1 % 2 = 1
    // 1 / 2 = 0
    // result = 101
    

    停止条件是 ~~(1/2) === 0

    const getBinary = (v) => {
    
      let remainder, binary = 1;
    
      while (true) {
    
        remainder = v % 2;
        v = ~~(v / 2);
    
        if (v === 0) {
          return binary;
        }
    
        if (remainder === 0) {
          binary = binary * 10 + 1;
        }
        else {
          binary = binary * 10;
        }
      }
    
    };
    
    console.log(getBinary(5));
    

    好吧,但是 binary 变量初始化为1。有什么方法可以改进它,使其与负数一起工作,或者如果0作为参数传递给函数?

    4 回复  |  直到 7 年前
        1
  •  4
  •   user10124491 user10124491    7 年前
    var integer = 52;
    console.log(integer.toString(2));
    

    javascript自带的简单函数,不需要冗长的代码。

        2
  •  2
  •   ibrahim mahrir    7 年前

    所以这里有一个方法。它有一个处理基本问题的内部函数和一个扩展到特殊情况的外部函数。我更喜欢做字符串表示。

    const getBinary = v => {
       if (v === 0) return '';
       let remainder = v % 2;
       let quotient = (v - remainder) / 2;
       if (remainder === 0) {
          return getBinary(quotient) + '0';
       }
       else {
          return getBinary(quotient) + '1';
       }
    }
    
    const betterGetBinary = v => {
       if (v === 0) return '0';
       if (v < 0) return '-' + getBinary(-v);
       return getBinary(v);
    }
    
    console.log(betterGetBinary(-10));
        3
  •  1
  •   Iłya Bursov    7 年前

    function toBinary(n) {
        n = Number(n);
        if (n == 0) return '0';
        var r = '';
        while (n != 0) {
            r = ((n&1)?'1':'0') + r;
            n = n >>> 1;
        }
        return r;
    }
    console.log(toBinary(5));
    console.log(toBinary(10));
    console.log(toBinary(-5));
    console.log(toBinary(0));
        4
  •  0
  •   the0ffh    7 年前

    一个快速而肮脏的解决方案,尽管它“可能”有两个缺陷:
    - Math.floor()
    -没有按位运算符

    let getBinary = number => {
      let done = false;
      let resultInverted = [];
      let acc = number;
      while (!done) {
        let reminder = acc % 2;
        if (acc === 1) {
          done = true;
        }
        acc = Math.floor(acc / 2);
        resultInverted.push(reminder);
      }
      return Number(resultInverted.reverse().join(''));
    };
    
    console.log(typeof getBinary(2));
    console.log(getBinary(5));
    console.log(getBinary(127));