@superseo

Что за сокращения в циклах for?

Делаю переборку массива по сочетаниям комбинаций. Алгоритм взял здесь
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?
  • Вопрос задан
  • 853 просмотра
Пригласить эксперта
Ответы на вопрос 1
Ivanq
@Ivanq
Знаю php, js, html, css
u>>=1 - u = Math.floor(u / 2).
u&1 - u % 2.
u<1<<c - u < Math.pow(2, c).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы