Алгоритм счета битов (Брайан Керниган) в целочисленной сложности времени

Может кто-то объяснить, почему алгоритм Брайана Кернигана использует O (log N) для подсчета установленных бит (1 с) в целое число. Простая реализация этого алгоритма ниже (в JAVA)

int count_set_bits(int n){
    int count = 0;
    while(n != 0){
        n &= (n-1);
        count++;
    }
    return count;
}

Я понимаю, как это работает, очищая самый правый установленный бит один за другим, пока он не станет равным 0, но я просто не знаю, как мы получаем O (log N).

Ответы на вопрос(3)

Ваш ответ на вопрос