2012-03-31 180 views
20

我想在JavaScript中將一個整數(我知道它將在0和32之間)轉換爲0和1的數組。我環顧四周,但找不到東西的作品..Javascript - 將整數轉換爲數組

所以,如果我有一個整數爲22(二進制10110),我想訪問它:

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

有什麼建議? 非常感謝

+0

比特它不是一個字節的數組。而一個0和1的數組可能只是一個int數組。 – GolezTrol 2012-03-31 09:37:20

回答

39

轉換基數爲二:

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

訪問字符(位):

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

太棒了,這個作品非常好!我正在考慮年齡的移位操作,但速度要快得多。非常感謝!! – DimC 2012-03-31 10:01:21

+0

U寫了「位數組」,所以---> var base2 =(yourNumber).toString(2).split(''); <---會給你一個數組中的每個字符(字符串,你仍然需要parseInt)。 – sebilasse 2014-05-11 14:08:34

+1

圓括號中包含_yourNumber_的是什麼?如果我運行'var base2 = 5.toString(2);'它不起作用,所以我很好奇......謝謝! – 2015-12-18 04:41:26

2

這應該做

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

我喜歡這個解決方案 – 2012-03-31 09:40:11

6
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位整數)。

1

您可以將整數轉換爲這樣的二進制字符串。請注意基本2參數。

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

您可以訪問字符的字符串,就好像它是一個數組:

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

此外,該代碼給出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

這給出長度爲31的字符串。第三行應該是: var baseL_ = new Array(33 - base2_.length).join(「0」); – Sam 2015-07-10 12:28:21

1

以前的答案構建:你可能希望你的數組是一個整數數組,而不是字符串,所以這裏是一行代碼:

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

注意,即較短的版本,(11).toString(2).split('').map(parseInt)將無法​​正常工作(鉻),對未知的我的理由是"0" S轉換到NaN小號

+0

'map(parseInt)'不起作用,因爲'Array.prototype.map(')爲其回調提供了3個參數,其中第二個參數是_index_。 'parseInt()'需要2個參數,其中第二個參數是_radix_。 – 2016-11-21 11:01:15

+0

'''(11).toString(2).split('')。map(val => parseInt(val))''' – 2017-05-06 04:54:45

1

你可能會做如下;

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