Это цикл. Его начальным условием является то, что lgN имеет значение ноль. Цикл продолжается до тех пор, пока N больше нуля. На каждой итерации цикла она добавляет единицу к lgN и делит N на 2.
Это очень буквальный перевод того, что делает цикл. Как это работает? Что ж, в первый раз в цикле он увеличивает lgN и делит N на 2. Итак, если N было 1, N теперь равно нулю, и мы закончили. Если N было больше единицы, мы должны повторить снова. Каждый раз, когда вы можете разделить N на 2 без нуля, это еще один обязательный бит в двоичном представлении. Код в основном спрашивает: «Сколько раз я могу разделить N на 2, прежде чем достигну 0?» и это наименьшее целое число больше, чем lg N.