web-dev-qa-db-fra.com

Javascript - convertit un entier en un tableau de bits

J'essaie en javascript de convertir un entier (qui sera compris entre 0 et 32), en un tableau de 0 et de 1. J'ai regardé autour de moi mais je n'ai pas trouvé quelque chose qui fonctionne ..

Donc, si j'ai un entier égal à 22 (10110 binaire), j'aimerais y accéder en tant que:

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

Aucune suggestion? Merci beaucoup

25
DimC

convertir en base 2:

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

accéder aux caractères (bits):

base2[0], base2[1], base2[3], etc...
53
nobody
var a = 22;
var b = [];

for (var i = 0; i < 5; i++)
  b[i] = (a >> i) & 1;

alert(b);

En supposant que 5 bits (il semblerait de votre question), donc 0 <= a < 32. Si vous le souhaitez, vous pouvez agrandir le 5, jusqu'à 32 (le décalage de bits en JavaScript fonctionne avec un entier 32 bits).

7
GolezTrol

Cela devrait faire

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

Vous pouvez convertir votre entier en chaîne binaire comme celle-ci. Notez le paramètre base 2.

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

Vous pouvez accéder aux caractères d'une chaîne comme s'il s'agissait d'un tableau:

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

Vous pourriez faire comme suit;

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

1
Redu

Construire sur les réponses précédentes: vous pouvez vouloir que votre tableau soit un tableau d'entiers, pas de chaînes, alors voici un one-liner:

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

Notez que cette version plus courte, (11).toString(2).split('').map(parseInt) ne fonctionnera pas (chrome), pour la raison inconnue qui me fait convertir "0"s en NaNs

1
Lex

De plus, ce code donne un tableau de 32length

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
0
Vyacheslav

SHORTESST (ES6)

Version la plus courte (32 caractères) qui remplit les derniers bits par zéro. Je suppose que n est votre numéro, b est la base (nombre de bits de sortie):

[...Array(b)].map((x,i)=>n>>i&1)

Exemple

// You can create following function:
//
// let bits = (n,b=32) => [...Array(b)].map( (x,i) => (n>>i)&1 );
//
// bits(63,8)    => [1, 1, 1, 1, 1, 1, 0, 0]  
// bits(63,8).reverse().join('')    => "00111111"

exemple de travail

0