私はJavascriptで整数(0と32の間になることがわかっています)を0と1の配列に変換しようとしています。周りを見回しましたが、動作するものが見つかりませんでした。
したがって、22(バイナリ10110)の整数がある場合、次のようにアクセスします。
Bitarr[0] = 0
Bitarr[1] = 1
Bitarr[2] = 1
Bitarr[3] = 0
Bitarr[4] = 1
助言がありますか?どうもありがとう
基数2に変換:
var base2 = (yourNumber).toString(2);
文字(ビット)にアクセスします。
base2[0], base2[1], base2[3], etc...
var a = 22;
var b = [];
for (var i = 0; i < 5; i++)
b[i] = (a >> i) & 1;
alert(b);
(あなたの質問から見えたように)5ビットを想定しているので、0 <= a < 32
。必要に応じて、5
大きく、最大32
(JavaScriptのビットシフトは32ビット整数で機能します)。
これはすべきです
for(int i = 0; i < 32; ++i)
Bitarr[i] = (my_int >> i) & 1;
このように整数をバイナリ文字列に変換できます。ベース2パラメータに注意してください。
var i = 20;
var str = i.toString(2); // 10100
String内の文字に配列のようにアクセスできます。
alert(str[0]); // 1
alert(str[1]); // 0
etc...
次のようにすることができます。
var n = 1071,
b = Array(Math.floor(Math.log2(n))+1).fill()
.map((_,i,a) => n >> a.length-1-i & 1);
console.log(b);
以前の答えを基にして、配列を文字列ではなく整数の配列にしたい場合があるので、ここにワンライナーを示します:
(1234).toString(2).split('').map(function(s) { return parseInt(s); });
短いバージョンの(11).toString(2).split('').map(parseInt)
は機能しないことに注意してください(クロム)。理由は不明ですが、"0"
sをNaN
sに変換します。
最後のビットをゼロで埋める最短(32文字)バージョン。 n
はあなたの数、b
はベース(出力ビット数)だと思います:
[...Array(b)].map((x,i)=>n>>i&1)
let bits = (n,b=32) => [...Array(b)].map((x,i)=>(n>>i)&1);
let Bitarr = bits(22,8);
console.log(Bitarr[0]); // = 0
console.log(Bitarr[1]); // = 1
console.log(Bitarr[2]); // = 1
console.log(Bitarr[3]); // = 0
console.log(Bitarr[4]); // = 1
参考までに:
(121231241).toString(2).split('').reverse().map((x, index) => x === '1' ? 1 << index : 0).reverse().filter(x => x > 0).join(' + ');
あなたに与えるでしょう:
67108864 + 33554432 + 16777216 + 2097152 + 1048576 + 524288 + 65536 + 32768 + 16384 + 4096 + 1024 + 512 + 256 + 128 + 8 + 1
さらに、このコードは32長の配列を提供します
function get_bits(value){
var base2_ = (value).toString(2).split("").reverse().join("");
var baseL_ = new Array(32 - base2_.length).join("0");
var base2 = base2_ + baseL_;
return base2;
}
1 => 1000000000000000000000000000000
2 => 0100000000000000000000000000000
3 => 1100000000000000000000000000000