web-dev-qa-db-ja.com

parseIntは10進数を2進数に変換しませんか?

私の理解から、2進数システムは、計算を実行するために0と1の2つの数値のセットとして使用します。

なぜ:

console.log(parseInt("11", 2)); return 3および00001011http://www.binaryhexconverter.com/decimal-to-binary-converter

29
Robert Rocha

parseInt(number, base)は、10進数number baseのbaseパラメーターで表される数値の値を返します。

また、11は10進数の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'>
30
Robo Robok

parseIntの代わりに toString() を使用します。

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

JavaScriptのドキュメントによると:

次の例はすべてNaNを返します。

parseInt("546", 2); //数字はバイナリ表現には無効です

parseIntのドキュメントで述べたように、parseInt()関数は文字列引数を解析し、の整数を返します指定された基数(数学的な数値システムの基数)。

そのため、11のバイナリ値を3の整数値に変換する必要があります。

11の整数値をバイナリ値に変換しようとしている場合、 Number.toString メソッドを使用する必要があります。

console.log(11..toString(2)); // 1011
13
Jason Cust

.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
4
alamnaryab

decimal stringをバイナリに変換するために見つけた最短の方法は次のとおりです。

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

ParseInt()関数は、文字列引数を解析し、指定された基数(数学的な数値システムの基数)の整数を返します。

したがって、11を2進数から10進数に変換することをシステムに伝えています。

具体的には、参照しているWebサイトについて詳しく見ると、実際にJSを使用してHTTP GETを発行し、Webサーバー側で変換しています。次のようなもの:

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

3
Simon Wang

これは古い質問ですが、少し貢献できる別のソリューションがあります。私は通常、この関数を使用して10進数を2進数に変換します。

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

_dec >>> 0_は数値をバイトに変換し、toString(radix)関数が呼び出されてバイナリ文字列を返します。シンプルできれいです。

注:radixは、数値を表すために使用されます。 2〜36の整数である必要があります。次に例を示します。

  • 2-数値はバイナリ値として表示されます
  • 8-数値は8進数値として表示されます
  • 16-数値は16進値として表示されます
2
Teocci

10進数から2進数への変換の背後にある数学を理解する必要があると思います。 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`;
    }
}
2
anshul

manual decimal to binaryアルゴリズムの簡潔な再帰バージョンを次に示します。

  • 10進数を半分に分割し、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    
        }
    }
    
1
Isaac

これは私のために働いた:parseInt(Number、original_base).toString(final_base)

例:10進数から2進数への変換のためのparseInt(32、10).toString(2)。

ソース: https://www.w3resource.com/javascript-exercises/javascript-math-exercise-3.php

1
jaykay

理解を深めるために、自分でその変換の計算を試みる必要があると思います。

  • (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); 
}
0
function num(n){
  return Number(n.toString(2));
}
console.log(num(5));
0
Prateek Arora