Упражнение 2.9. Применительно к числам, в представлении которых использован дополнительный код, выражение х &= (х-1) уничтожает самую правую 1 в х. Объясните, почему. Используйте это наблюдение при написании более быстрого варианта функции bitcount.
У самого правого единичного значения х есть соответствующее нулевое значение в (х-1), а битовая операция & переводит 1 в ноль, если соответствующий бит равен нулю.
#include <stdio.h>
#include "viewbin.h"
int bitcount(unsigned x);
int main()
{
int x;
printf("Enter the number\nx: ");
scanf("%d", &x);
bin(x);
printf("%d\n", bitcount(x));
return 0;
}
int bitcount(unsigned x)
{
int b;
for(b = 0; x != 0; b++)
x &=(x-1);
return b;
}
Результат:
Комментариев нет:
Отправить комментарий