2012-03-31 17 views
20

Bir tamsayı (0 ile 32 arasında olacağını bildiğim) dönüştürmek için javascript çalışıyorum, 0s ve 1s dizisine.Javascript - tamsayı bit bitlerine dönüştür

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

Herhangi önerileri: Ben 22 (ikili 10110) gibi bir tamsayı varsa, ben olarak erişmek istiyorsanız,

Yani .. etrafına baktı ama çalışan bir şey bulamadık? çok teşekkürler

+0

bit değil bir bayt dizisi. Ve 0'lar ve 1'ler dizisi muhtemelen sadece bir dizi dizidir. – GolezTrol

cevap

39

dönüştürme:

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

erişim karakterler (bit):

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

Fantastik, bu çok iyi çalışıyor! Çağlar için bit-vardiya operasyonlarına bakıyordum ama bu daha hızlı. Çok teşekkürler!! – DimC

+0

U "bit dizisi" yazdı, bu yüzden ---> var base2 = (yourNumber) .toString (2) .split (''); <--- bir dizide her bir karakteri (string, hala parseInt) vereceksiniz. – sebilasse

+1

_yourNumber_'ın parantez içinde sarılması ne yapar? Eğer ben var base2 = 5.toString (2); 'i çalıştırırsam, işe yaramaz, bu yüzden merak ediyorum ... Teşekkürler! –

2

Bu

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

Bu çözümü beğendim –

6
var a = 22; 
var b = []; 

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

alert(b); 

yüzden 0 <= a < 32, (sizin sorudan gibiydi) 5 bit varsayarsak yapmalıdır. İsterseniz 5'u daha büyük, 32 yapabilirsiniz (JavaScript'de bit kaydırması 32 bit tamsayı ile çalışır). Tabana 2

1

Böyle bir ikili dize için tamsayı dönüştürebilirsiniz. Temel 2 parametresini not edin.

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

bir dizi gibi bir dize içinde karakter erişebilir: önceki yanıtlarını yukarı Bina

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

bu kod verir 32length dizi

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

Bu, 31 uzunluk dizeleri verir.Üçüncü satır şöyle olmalıdır: var baseL_ = new Array (33 - base2_.length) .join ("0"); – Sam

1

: Eğer dizininin tamsayılar dizisi olmasını istemeyebilir, dizeleri değil, yani burada bir tane var:

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

Not kısa versiyonu, (11).toString(2).split('').map(parseInt) bana bilinmeyen için (krom), işe yaramaz o kadar "0" s dönüştürür ikna NaN s

+0

'map (parseInt)', Array.prototype.map (') işlevi, 2'nin dizi _index_ olan geri bildirimi için 3 adet hata sağlar. parseInt(), 2'si _radix_ olan 2 args bekler. –

+0

'' '(11) .toString (2) .split (''). Map (val => parseInt (val))' '' –

1
Sen şöyle yapabilir

;

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

İlgili konular