Из моего понимания система двоичных чисел использует как набор из двух чисел, 0 и 1 для выполнения вычислений.
Почему:
console.log(parseInt("11", 2));
return 3
, а не 00001011
?
http://www.binaryhexconverter.com/decimal-to-binary-converter
Из моего понимания система двоичных чисел использует как набор из двух чисел, 0 и 1 для выполнения вычислений.
Почему:
console.log(parseInt("11", 2));
return 3
, а не 00001011
?
http://www.binaryhexconverter.com/decimal-to-binary-converter
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'>
Используйте toString() вместо parseInt
:
11..toString(2)
var str = "11";
var bin = (+str).toString(2);
console.log(bin)
Согласно документации JavaScript:
Следующие примеры возвращают NaN:
parseInt("546", 2);
// Цифры недействительны для двоичных представлений
Как указано в документации для parseInt
: функция parseInt() анализирует строковый аргумент и возвращает целое число указанный baseix (база в математических числовых системах).
Итак, он делает именно то, что он должен делать: преобразование двоичного значения 11
в целочисленное значение 3
.
Если вы пытаетесь преобразовать целочисленное значение 11
в двоичное значение, то вам нужно использовать метод Number.toString
:
console.log(11..toString(2)); // 1011
.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
Я нашел метод shorttes для преобразования десятичной строки в двоичный:
const input = "54654";
const output = (input*1).toString(2);
print(output);
Функция parseInt() анализирует строковый аргумент и возвращает целое число указанного основани (основание в математических числовых системах).
Итак, вы сообщаете системе, в которой вы хотите преобразовать 11 как двоичную в десятичную.
В частности, на веб-сайт, на который вы ссылаетесь, если вы посмотрите ближе, он фактически использует JS для выдачи HTTP GET для его преобразования на стороне веб-сервера. Что-то вроде следующего:
http://www.binaryhexconverter.com/hesapla.php?fonksiyon=dec2bin°er=11&pad=false
Это старый вопрос, однако у меня есть другое решение, которое может немного помочь. Я обычно использую эту функцию для преобразования десятичного числа в двоичное:
function dec2bin(dec) {
return (dec >>> 0).toString(2);
}
dec >>> 0
преобразует число в байт, а затем вызывается функция toString(radix)
для возврата двоичной строки. Это просто и чисто.
Примечание: radix
используется для представления числового значения. Должно быть целым числом от 2 до 36. Например:
Я думаю, вы должны понимать математику десятичного преобразования в двоичное. Вот простая реализация в 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';
}
}
Это сработало для меня: parseInt (Number, original_base).toString(final_base)
Например: parseInt (32, 10).toString(2) для десятичного преобразования в двоичное.
Источник: https://www.w3resource.com/javascript-exercises/javascript-math-exercise-3.php
Вот краткая рекурсивная версия ручного десятичного к двоичному алгоритму:
Пример использования 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
}
}
Чтобы лучше понять, я думаю, вы должны попытаться сделать математику этого обращения самостоятельно.
Я сделал функцию, основанную на этой логике
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); }
function num(n){
return Number(n.toString(2));
}
console.log(num(5));
Вот что я сделал, чтобы получить решение:
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. Я надеюсь, что это имеет смысл, и это поможет вам.