Получить двоичное представление целого числа - PullRequest
0 голосов
/ 30 августа 2018

У меня только что был вопрос на собеседовании, где мне нужно получить двоичное представление целого числа, это то, что я должен знать, как это сделать. Например, 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 голосов
/ 30 августа 2018

Быстрое и грязное решение, хотя оно может иметь два недостатка:
- 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));
0 голосов
/ 30 августа 2018

Если вы хотите написать это с нуля, вы можете использовать что-то вроде этого:

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));
0 голосов
/ 30 августа 2018

Так вот один из способов. Он имеет внутреннюю функцию, которая обрабатывает основы, и внешнюю, которая распространяется на ваши особые случаи. Я предпочел делать строковые представления.

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));
0 голосов
/ 30 августа 2018
var integer = 52;
console.log(integer.toString(2));

Простая функция, встроенная в javascript, не требуется длинный код.

...