Вычисление паритета

Я не совсем понимаю этот алгоритм вычисления бита четности. Может кто-нибудь объяснить, пожалуйста, подробно?

Следующий код взят из книги «Хакерское наслаждение»:

int parity(unsigned x) {
   unsigned y;
   y = x ^ (x >> 1);
   y = y ^ (y >> 2);
   y = y ^ (y >> 4);
   y = y ^ (y >> 8);
   y = y ^ (y >>16);
   return y & 1;
}

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

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