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