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