Все более-менее в нем понятно, вот только побитовое смещение не совсем мне понятно...
Очень красивое решение.
Rsh (битовое смещение вправо) в данном случае выполняет роль счетчика второго цикла.
Если вкратце, то суть примерно следующая - вычисляется максимальное кол-во сочетаний ($total), далее идут проходы, где шаг цикла можно так сказать переводится в двоичное представление, т.е. для qwerty будет например так:
I шаг = двоичное представление
0 шаг = 0
1 шаг = 1
2 шаг = 10
3 шаг = 11
4 шаг = 100
5 шаг = 101
6 шаг = 110
7 шаг = 111
8 шаг = 1000
9 шаг = 1001
10 шаг = 1010
11 шаг = 1011
12 шаг = 1100
...
25 шаг = 11001
Т.е. фактически на каждом шаге получаем информацию где надо добавить точку.
Операция смещения $bits=$bits>>1; позволяет "пройти по битам".
Т.е. для 9го шага и значения 1001 после первого выполнения смещения будет результат 100, после второго 10, третьего 1, четвертого 0. Учет битов идет справа, т.е. нулевым битом в байте является крайний справа.
Операцией $bits&1 (логическое И) сравнивается является ли "текущий" (крайний правый) бит единицей и если это так - добавляет точку к буферу в позиции pos.
Вот и выходит что первичный цикл создает весь список комбинаций точек, а второй "битовый псевдоцикл" нужен для нахождения куда именно эти точки впихнуть.