ParseInt не преобразовывает десятичную в двоичную?

Из моего понимания система двоичных чисел использует как набор из двух чисел, 0 и 1 для выполнения вычислений.

Почему:

console.log(parseInt("11", 2)); return 3, а не 00001011? http://www.binaryhexconverter.com/decimal-to-binary-converter

Ответ 1

parseInt(number, base) возвращает десятичное значение числа, представленного параметром number в base базе.

И 11 является двоичным эквивалентом 3 в десятичной системе счисления.

var a = {};

window.addEventListener('input', function(e){
  a[e.target.name] = e.target.value;
  console.clear();
  console.log(  parseInt(a.number, a.base)  );
}, false);
<input name='number' placeholder='number' value='1010'>
<input name='base' placeholder='base' size=3 value='2'>

Ответ 2

Используйте toString() вместо parseInt:

11..toString(2)
var str = "11";
var bin = (+str).toString(2);
console.log(bin)

Согласно документации JavaScript:

Следующие примеры возвращают NaN:

parseInt("546", 2);// Цифры недействительны для двоичных представлений

Ответ 3

Как указано в документации для parseInt: функция parseInt() анализирует строковый аргумент и возвращает целое число указанный baseix (база в математических числовых системах).

Итак, он делает именно то, что он должен делать: преобразование двоичного значения 11 в целочисленное значение 3.

Если вы пытаетесь преобразовать целочисленное значение 11 в двоичное значение, то вам нужно использовать метод Number.toString:

console.log(11..toString(2)); // 1011

Ответ 4

.toString(2) работает при применении к типу Number.

255.toString(2)      // syntax error
"255".toString(2);   // 255

var n=255;
n.toString(2);      // 11111111

// or in short
Number(255).toString(2) // 11111111
// or use two dots so that the compiler does
// mistake with the decimal place as in 250.x
255..toString(2)        // 11111111

Ответ 5

Я нашел метод shorttes для преобразования десятичной строки в двоичный:

const input = "54654";
const output = (input*1).toString(2);
print(output);

Ответ 6

Функция parseInt() анализирует строковый аргумент и возвращает целое число указанного основани (основание в математических числовых системах).

Итак, вы сообщаете системе, в которой вы хотите преобразовать 11 как двоичную в десятичную.

В частности, на веб-сайт, на который вы ссылаетесь, если вы посмотрите ближе, он фактически использует JS для выдачи HTTP GET для его преобразования на стороне веб-сервера. Что-то вроде следующего:

http://www.binaryhexconverter.com/hesapla.php?fonksiyon=dec2bin&deger=11&pad=false

Ответ 7

Это старый вопрос, однако у меня есть другое решение, которое может немного помочь. Я обычно использую эту функцию для преобразования десятичного числа в двоичное:

function dec2bin(dec) {
    return (dec >>> 0).toString(2);
}

dec >>> 0 преобразует число в байт, а затем вызывается функция toString(radix) для возврата двоичной строки. Это просто и чисто.

Примечание: radix используется для представления числового значения. Должно быть целым числом от 2 до 36. Например:

  • 2 - число будет отображаться в виде двоичного значения
  • 8 - число будет отображаться как восьмеричное значение
  • 16 - число будет отображаться как шестнадцатеричное значение

Ответ 8

Я думаю, вы должны понимать математику десятичного преобразования в двоичное. Вот простая реализация в JavaScript.

main();

function main() {
    let input  = 12;
    let result = decimalToBinary(input);
    console.log(result);
}

function decimalToBinary(input) {
    let base           = 2;
    let inputNumber    = input;
    let quotient       = 0;
    let remainderArray = [];
    let resultArray    = [];

    if (inputNumber) {
        while (inputNumber) {
            quotient = parseInt(inputNumber / base);

            remainderArray.push(inputNumber % base);

            inputNumber = quotient;
        }
        for (let i = remainderArray.length - 1; i >= 0; i--) {
            resultArray.push(remainderArray[i]); 
        }
        return parseInt(resultArray.join(''));
    } else {
        return '${input} is not a valid input';
    }
}

Ответ 10

Вот краткая рекурсивная версия ручного десятичного к двоичному алгоритму:

  • Разделите десятичное число пополам и объедините остаток для каждой операции до значения == 0 и напечатайте объединенную двоичную строку
  • Пример использования 25: 25/2 = 12 (r1)/2 = 6 (r0)/2 = 3 (r0)/2 = 1 (r1)/2 = 0 (r1) => 10011 => реверс => 11001

    function convertDecToBin(input){
        return Array.from(recursiveImpl(input)).reverse().join(""); //convert string to array to use prototype reverse method as bits read right to left 
    
        function recursiveImpl(quotient){
            const nextQuotient = Math.floor(quotient / 2); //divide subsequent quotient by 2 and take lower limit integer (if fractional)
            const remainder = ""+quotient % 2; //use modulus for remainder and convert to string
            return nextQuotient===0?remainder:remainder + recursiveImpl(nextQuotient); //if next quotient is evaluated to 0 then return the base case remainder else the remainder concatenated to value of next recursive call    
        }
    }
    

Ответ 11

Чтобы лучше понять, я думаю, вы должны попытаться сделать математику этого обращения самостоятельно.

  • (1) 11/2 = 5
  • (1) 5/2 = 2
  • (0) 2/2 = 1
  • (1) 1/2 = 0

Я сделал функцию, основанную на этой логике

function decimalToBinary(inputNum) {

    let binary = [];

    while (inputNum > 0) {

        if (inputNum % 2 === 1) {

            binary.splice(0,0,1);
            inputNum = (inputNum - 1) / 2;

        } else {

            binary.splice(0,0,0);
            inputNum /= 2;
        }
    }

    binary = binary.join('');
    console.log(binary);
}

Ответ 12

function num(n){
  return Number(n.toString(2));
}
console.log(num(5));

Ответ 13

Вот что я сделал, чтобы получить решение:

    function addBinary(a,b) {
 // function that converts decimal to binary
 function dec2bin(dec) {
   return (dec >>> 0).toString(2);
 } 
 var sum = a+b; // add the two numbers together
 return sum.toString(2); //converts sum to binary
} 

addBinary(2, 3);

Сначала я преобразовал десятичное число в двоичное, как было сказано, и получил функцию из w3schools в рамках урока JavaScript Bitwise. Затем, чтобы облегчить себе задачу, я создал переменную "сумма", которая выполняет сложение, и, наконец, я заставил функцию addBinary возвращать сумму в виде двоичного кода, а затем вызвал ее. Это прошло в CodeWars. Я надеюсь, что это имеет смысл, и это поможет вам.