Страницы

Translate

понедельник, 5 августа 2013 г.

Упражнение 2.9. Вариант функции bitcount(x)

Упражнение 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;
}

Результат:


Комментариев нет:

Отправить комментарий