На главную страницу

Решения к упражнениям из книги "Язык программирования С" Б. Керниган и Д. Ритчи

Упражнение 2.9.


Благодаря свойствам двоичной системы счисления выражение x &= (x-1) удаляет самый правый единичный бит в переменной x. Докажите это. Воспользуйтесь этим фактом для того, чтобы написать более быструю версию функции bitcount.
----------
/* Exercise 2.9 from "The C programming language" book by K&R */

#include <stdio.h>

/* counts 1 bits in binary variable x */
int bitcount(unsigned x)
{
	int i = 0;
	while (x) {
		x &= (x - 1);
		i++;
	}
	return i;
}

int main(void)
{
	printf("%d\n", bitcount(0xFF));
	return 0;
}
	
----------

Последнее изменение: 19.05.2011