获取整数的二进制表示

时间:2018-08-29 22:47:40

标签: javascript node.js binary bit-manipulation bitwise-operators

我刚遇到一个面试问题,我需要获取整数的二进制表示形式,这是我应该知道的方法。例如,5以二进制形式表示为101,步骤类似于:

// 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 个答案:

答案 0 :(得分:4)

from docx import Document
from docx.shared import Inches
from docx.table import _Cell, Table
from docx.section import  Sections


doc = Document(path_doc)
p = doc.add_paragraph()
r = p.add_run()
r.add_picture(path_image)
doc.save()

JavaScript固有的简单功能,无需冗长的代码。

答案 1 :(得分:2)

所以这是一种方法。它具有处理基本内容的内部功能,以及扩展到特殊情况的外部功能。我更喜欢做字符串表示。

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));

答案 2 :(得分:1)

如果您想从头开始编写它,则可以使用如下代码:

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));

答案 3 :(得分:0)

一种快速而肮脏的解决方案,尽管它“可能”有两个缺陷:
-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));