Javascript - 将整数转换为位数组

时间:2012-03-31 09:34:51

标签: javascript integer bits

我正在尝试使用javascript将一个整数(我知道将在0到32之间)转换为0和1的数组。我环顾四周但找不到有用的东西..

所以,如果我有一个22的整数(二进制10110),我想将其作为:

Bitarr[0] = 0
Bitarr[1] = 1
Bitarr[2] = 1
Bitarr[3] = 0
Bitarr[4] = 1

有什么建议吗? 非常感谢

9 个答案:

答案 0 :(得分:58)

转换为基数2:

var base2 = (yourNumber).toString(2);

访问字符(位):

base2[0], base2[1], base2[3], etc...

答案 1 :(得分:7)

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位整数一起使用)。

答案 2 :(得分:3)

这应该

for(int i = 0; i < 32; ++i)
  Bitarr[i] = (my_int >> i) & 1;

答案 3 :(得分:1)

您可以将整数转换为二进制字符串。注意基数2参数。

var i = 20;
var str = i.toString(2); // 10100

您可以像在数组中一样访问字符串中的字符:

alert(str[0]); // 1
alert(str[1]); // 0
etc...

答案 4 :(得分:1)

建立以前的答案:你可能希望你的数组是一个整数数组,而不是字符串,所以这里是一个单行:

(1234).toString(2).split('').map(function(s) { return parseInt(s); });

请注意,较短的版本(11).toString(2).split('').map(parseInt)无法使用(chrome),因为我不知道它会将"0"转换为NaN s

答案 5 :(得分:1)

您可以执行以下操作;

&#13;
&#13;
var n = 1071,
    b = Array(Math.floor(Math.log2(n))+1).fill()
                                         .map((_,i,a) => n >> a.length-1-i & 1);
console.log(b);
&#13;
&#13;
&#13;

答案 6 :(得分:1)

最短(ES6)

最短(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

答案 7 :(得分:0)

此外,此代码提供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

答案 8 :(得分:0)

仅出于参考目的:

(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