Делаю переборку массива по сочетаниям комбинаций. Алгоритм взял здесь
rosettacode.org/wiki/Combinations#JavaScript
но возникают проблемы с этим кодом - перестает расти число.. свой код под спойлер спрячу
upd добавил комментарии
как можно уйти от использования битовых операций?
Что это за конструкция такая u>>=1 и что она дает в составе цикла? А if(u&1) что и как проверяет?
for (var n=0; u; ++n, u>>=1){ // побитовый сдвиг u вправо на что? на сколько? и почему между равно и сдвигом нет ничего?? и условие цикла - просто u. с чем сравнивается для выполнения?
..
if(u&1){ .. } //просто не понимаю, по какому принципу именно с единицей побитово сравнивают чтобы выполнить остальное.. единственное подозрение - все нечетные u проходят сюда, судя из описаниия битовых операций.
}
Здесь еще более непонятно - u=u&(u-1)..
for (var n=0; u; ++n, u=u&(u-1));//что это за операция? при каждой итерации от u отнимаем единицу(почему не сдвинули?) и сравниваем с u. логический ответ записываем в u. зачем?? два следом идущих числа в побитовом сравнении И ведь всегда будут давать 0..
Ну и здесь, что за двойное неравенство с двойным "меньше"?
for (var u=0; u<1<<c; u++)//к примеру на вход пришло c = 4, стало быть сравниваем u < (1 сдвигаем влево побитово на 4 знака = 16). почему именно с 16?