JavaScript将十进制转换为二进制

时间:2015-06-29 22:05:01

标签: javascript binary

根据我的理解,二进制数系统使用两个数字的集合,0和1来执行计算。

为什么:

console.log(parseInt("11", 2));返回3而非00001011http://www.binaryhexconverter.com/decimal-to-binary-converter

15 个答案:

答案 0 :(得分:75)

使用toString()代替parseInt

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

根据JavaScript的文档:

  

以下示例均返回NaN:

     

parseInt("546", 2); // 数字对二进制表示无效

答案 1 :(得分:30)

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 :(得分:13)

documentation for parseInt中所述: parseInt()函数解析字符串参数,返回指定基数的整数(数学数字系统中的基数)。< / em>的

因此,它正在做它应该做的事情:将二进制值11转换为整数值3

如果您尝试将11的整数值转换为二进制值,则需要使用Number.toString方法:

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

答案 3 :(得分:3)

parseInt()函数解析字符串参数并返回指定基数的整数(数学系统中的基数)。

因此,您告诉系统要将11转换为二进制为小数。

具体到您所指的网站,如果您仔细观察它实际上是使用JS发出HTTP GET来在Web服务器端转换它。如下所示:

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

答案 4 :(得分:3)

.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 :(得分:2)

这是一个老问题,但是我有另一个解决方案,可能会有所帮助。我通常使用此函数将十进制数转换为二进制数:

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

dec >>> 0将数字转换为字节,然后调用toString(radix)函数以返回二进制字符串。简单干净。

注意:radix用于表示数字值。必须是2到36之间的整数。例如:

  • 2-数字将显示为二进制值
  • 8-数字将显示为八进制值
  • 16-数字将显示为十六进制值

答案 6 :(得分:2)

我发现的将十进制字符串转换为二进制文件的shortes方法是:

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

答案 7 :(得分:2)

只需使用Number(x).toString(base)。底数必须等于2的地方。

var num1=13;
Number(num1).toString(2)

结果:“ 1101”

Number(11).toString(2)

结果:“ 1011”

答案 8 :(得分:1)

我认为您应该了解十进制到二进制转换背后的数学原理。这是使用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`;
    }
}

答案 9 :(得分:1)

这对我有用:parseInt(Number,original_base).toString(final_base)

例如:parseInt(32,10).toString(2)用于十进制到二进制的转换。

来源:https://www.w3resource.com/javascript-exercises/javascript-math-exercise-3.php

答案 10 :(得分:1)

这是手动十进制到二进制算法的简洁递归版本:

  • 将十进制数除以一半,然后将每个操作的余数相加,直到value == 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 :(得分:0)

为了获得更好的理解,我认为您应该尝试自己做一次转换的数学运算。

  • (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 :(得分:0)

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

答案 13 :(得分:0)

这是我为获得解决方案所做的:

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

我首先像上面说的那样将十进制数转换为二进制,然后在JavaScript Bitwise课程中从w3schools获得了该函数。然后,为了使自己更轻松,我创建了变量“ sum”进行加法运算,最后使addBinary函数将sum作为二进制代码返回,然后对其进行调用。它通过了CodeWars。希望这对您有所帮助。

答案 14 :(得分:0)

似乎字符串基数(dec >>> 0).toString(2)的转换返回的格式错误的二进制数。我已经在Chrome中验证了此解决方案。如果有人要手动计算二进制数以进行验证,请从左到右将与二进制数映射到1的{​​{1}}位置相对应的数字加在一起。

例如:

  • [1][2][4][8][16][32][64][128] ...的二进制形式是100101
  • 0 + 2 + 0 + 8的二进制形式是131011
  • 1 + 0 + 4 + 8的二进制形式是25511111111
1 + 2 + 4 + 8 + 16 + 32 + 64 + 128