Как судить, есть ли хотя бы 1 в двоичном представлении числа с использованием C? [Дубликат]
На этот вопрос уже есть ответ здесь:
Вычисление паритета 2 ответаУже есть вопросы по подсчету сколько1
s есть в числе, но этот вопрос касается оценки, есть ли четное или нечетное число 1.
Любые операторы цикла или условные (включая переключатели) не допускаются. Также следует избегать операторов деления, умножения или модуля. Чтобы быть более точным, мы можем предположить, что это 32-разрядное целое число без знака.
На самом деле у меня уже есть реализация, но я не могу понять причину, почему она работает. Любое доказательство его правильности или любая новая идея будет очень полезна.
int even_ones(unsigned x)
{
x ^= x>>16;
x ^= x>>8;
x ^= x>>4;
x ^= x>>2;
x ^= x>>1;
return !(x & 1);
}