10進⇒2進変換/ビット抽出 JavaScript


10進数2進数の計算

WebMidiApi・Arduinoなどで年に数回10進数から2進数変換が必要になります。その都度調べていたのでここにJavaScriptで書いておきます。JSでは「toString(2)」でおわるはなしですが一桁ずつビット単位で必要なことも多いので人間風の計算から機械風まで計算の答えより式の過程をみてくだい。



Output

10進>2進 人間が考える計算風

function H10to2(){
document.getElementById("out").innerHTML = "";
 var n = parseInt(document.getElementById("nm").value,10);
 var z = n.toString(2);
 var a,b,c,d,e,f,g,h;
 a = Math.floor(n%2);
 b = Math.floor((n/2)%2);
 c = Math.floor((n/2/2)%2);
 d = Math.floor((n/2/2/2)%2);
 e = Math.floor((n/2/2/2/2)%2);
 f = Math.floor((n/2/2/2/2/2)%2);
 g = Math.floor((n/2/2/2/2/2/2)%2);
 h = Math.floor((n/2/2/2/2/2/2/2)%2);
 
 document.getElementById("out").innerHTML = z + "<br>" +
 h.toString() +
 g.toString() +
 f.toString() +
 e.toString() +
 d.toString() +
 c.toString() +
 b.toString() +
 a.toString();
}

10進>2進 上記をもう少し機械寄りにする

function P10to21(){
document.getElementById("out").innerHTML = "";
 var n = parseInt(document.getElementById("nm").value,10);
 var z = n.toString(2);
 var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0;
 if((n & (1 << 0)) > 0)a=1;
 if((n & (1 << 1)) > 0)b=1;
 if((n & (1 << 2)) > 0)c=1;
 if((n & (1 << 3)) > 0)d=1;
 if((n & (1 << 4)) > 0)e=1;
 if((n & (1 << 5)) > 0)f=1;
 if((n & (1 << 6)) > 0)g=1;
 if((n & (1 << 7)) > 0)h=1;
 
 document.getElementById("out").innerHTML = z + "<br>" +
 h.toString() +
 g.toString() +
 f.toString() +
 e.toString() +
 d.toString() +
 c.toString() +
 b.toString() +
 a.toString();
}
function P10to22(){
document.getElementById("out").innerHTML = "";
 var n = parseInt(document.getElementById("nm").value,10);
 var z = n.toString(2);
var a,b,c,d,e,f,g,h;
a=(n & (1 << 0)) /1;
b=(n & (1 << 1)) /2;
c=(n & (1 << 2)) /4;
d=(n & (1 << 3)) /8;
e=(n & (1 << 4)) /16;
f=(n & (1 << 5)) /32;
g=(n & (1 << 6)) /64;
h=(n & (1 << 7)) /128;
 document.getElementById("out").innerHTML = z + "<br>" +
 h.toString() +
 g.toString() +
 f.toString() +
 e.toString() +
 d.toString() +
 c.toString() +
 b.toString() +
 a.toString();
}
function P10to23(){
document.getElementById("out").innerHTML = "";
 var n = parseInt(document.getElementById("nm").value,10);
 var z = n.toString(2);
var a,b,c,d,e,f,g,h;
a=(n & (0x01 << 0)) /1;
b=(n & (0x01 << 1)) /2;
c=(n & (0x01 << 2)) /4;
d=(n & (0x01 << 3)) /8;
e=(n & (0x01 << 4)) /16;
f=(n & (0x01 << 5)) /32;
g=(n & (0x01 << 6)) /64;
h=(n & (0x01 << 7)) /128;
 document.getElementById("out").innerHTML = z + "<br>" +
 h.toString() +
 g.toString() +
 f.toString() +
 e.toString() +
 d.toString() +
 c.toString() +
 b.toString() +
 a.toString();
}

10進>2進 さらに機械寄りに書くと

function P10to24(){
document.getElementById("out").innerHTML = "";
 var n = parseInt(document.getElementById("nm").value,10);
 var z = n.toString(2);
var a, b="";
for(i = 0; i < 8; i++) {
    a=0;
    /*if((n & (0x01 <<7 - i)) /(n & (0x01 <<7 - i))) a = 1; 0/0 error */
    if((n & (0x01 <<7 - i))>0) a=1;
    a=parseInt(a,10).toString();
    b = b + a;
}
 document.getElementById("out").innerHTML = z + "<br>" + b;
}
function P10to25(){
document.getElementById("out").innerHTML = "";
 var n = parseInt(document.getElementById("nm").value,10);
 var z = n.toString(2);
var a, b="";
for(i = 0; i < 8; i++) {
    a = (n & (0x01 <<7 - i))/ Math.pow(2, 7 - i);
    a = parseInt(a,10).toString();
    b = b + a;
}
 document.getElementById("out").innerHTML = z + "<br>" + b;
}

おまけ 10進>2進分割>10進に戻す

function P10to26(){
document.getElementById("out").innerHTML = "";
 var n = parseInt(document.getElementById("nm").value,10);
 var z = n.toString(2);
var a, b=0;
for(i = 0; i < 8; i++) {
    a=(n & (0x01 << 7 - i));
    b = b + a;
}
 document.getElementById("out").innerHTML = z + "<br>" + b;
}
logo