2016-11-04 3 views
0

Кто-нибудь пытался получить двоичные «компоненты» числа?Поврежденная маска Javascript

То, что я пытаюсь сделать, это:

У меня есть номер: 5, так что 0101 в двоичной системе. Я пытаюсь найти сумму чисел, которые могут дать нам 5. Очевидно, я знаю, что это 1 и 4 (0001 и 0100), но я не могу понять, как получить это через код.

В MDN есть хорошая статья о побитовых операциях, но до сих пор нет радости.

+0

так .... какой алгоритм вы намереваетесь? 1 + 4 - это только одна возможность. У вас также есть 2 + 3 –

+0

@VladimirM. Они хотят отдельные биты (1 = 0001, 4 = 0100), то есть мощности двух. 3 имеет более одного бита. – JJJ

+0

Просто получите позиции тех, что указаны в строковом представлении, начиная с 0 и _ от правого_2 до мощности позиции - это значения, которые вы ищете. – CBroe

ответ

2

var number = 5, 
 
    result = []; 
 

 
for(var i = 1; i <= number; i = i << 1) { 
 
    if(i & number) { 
 
    result.push(i & number); 
 
    } 
 
} 
 

 
console.log(result);

приращение петли i по степеням два (1, 2, 4, 8 ...) с использованием побитового сдвига (i << 1 умножает число на два, вы могли бы также сделать i *= 2) и проверяет побитовое И (&), если исходный номер имеет этот бит. Если это так, он добавляет его как число в массив результатов.

+0

Иисус, так просто. большое спасибо! – eloleon

0

Вы можете использовать Number.prototype.toString с параметром radix.

var number = 5; 
number.toString(2); // -> "101" 

Вы можете разделить эту строку и карту с помощью Number если вам нужны сами цифры.

number.toString(2).split("").map(Number); // -> [1, 0, 1] 

Просто не забудьте обернуть число в скобках, если вы не хотите сначала хранить его как переменную.

5.toString(2).split("").map(Number); // -> SyntaxError 
(5).toString(2).split("").map(Number); // -> [1, 0, 1] 
0

Вот генератор на основе решения, которое даст ряд единиц или нулей:

const bits = *(n) => { do yield n & 1; while (n >>= 1); }; 

> console.log(Array.from(bits(5)); 
< [1, 0, 1] 

Затем можно умножить результаты, соответствующие степени двойки, и или отфильтровать нули, если вы так склонны.

Смежные вопросы