Что вычисляет функция с битовыми операциями

Опубликовано May 29, 2012 в Манипуляция битами, Разбор примеров кода | 3 коммент.

, ,

Что вычисляет функция с битовыми операциями

Что вычисляет следующая функция?

Подсказка. Операция n & (n-1) уничтожает последнюю единицу в двоичном представлении числа n.

Вопрос. Нужно ли изменять реализацию функции (и, если нужно, – то как), если ее заголовок переделать на

int F(int & n)?

int F(int n)
 {
	 if (n == 0)
		return 0;
         else
		return 1 + F(n & (n-1));
 }

Автор публикации:

3 Коммент. : “Что вычисляет функция с битовыми операциями”

  1. Alehandro says:

    Функция возвращает количество единиц содержащихся в двоичном представлении числа.

    Если поменять заголовок на int F(int & n), тогда нужно использовать промужеточную переменную, как-то так:

    int temp;

    temp = n & (n-1);
    return 1 + F(temp);

    Если использовать заголовок int F(const int & n), тогда менять ничего не надо.

  2.  
    F proc
     
     arg n : dword
     
      xor   eax,eax
      cmp   [n],0
      jz    @end
      mov   ecx,32
     
     @l:
      shr   [n],1
      adc   eax,0
      loop  @l
     
     @end:
      retn  4
     
    F endp

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

Ваш адрес email не будет опубликован.


*