Как написать функцию для определения количества населения 16-битного целого числа с помощью php или javascript? - PullRequest
1 голос
/ 13 октября 2010

Как написать функцию для определения численности населения 16-битного целое число с использованием php или javascript. Количество населения определяется как количество битов, которые «включен», или в других, это число 1 в двоичном представление числа. Например, двоичное число 0b0000 имеет количество населения 0, потому что нет 1 бит. 0b0101 имеет количество населения 2, потому что 2 бита включены; 0b1110 имеет Численность населения 3. 0b1111111111111111 имеет количество населения, если 16 потому что есть шестнадцать 1 бит. Ваша функция должна принимать INTEGER аргумент и вернуть INTEGER, содержащий его количество населения. Пример:

f (0) = 0

f (1) = 1

f (2) = 1

f (3) = 2

f (4) = 1

f (5) = 2

Ответы [ 3 ]

6 голосов
/ 13 октября 2010

Использование побитового и правого сдвига

function count(n){
  c =0;
  while(n){
    c += n&1;
    n = n>>1;
  }
  return c;
}
4 голосов
/ 13 октября 2010

Злой путь?

    var x=0xfffe;
    x -= ((x >> 1) & 0x55555555);
    x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
    x = (((x >> 4) + x) & 0x0f0f0f0f);
    x += (x >> 8);
    x += (x >> 16);
    alert(x & 0x0000003f); //15
1 голос
/ 13 октября 2010

Не обязательно задира , но это работает ...

<?php
$number = 3;

echo "Number: " . $number . "\n";

$bin_number = decbin($number);
$population_count = 0;

echo "Binary String Conversion: " . $bin_number . "\n";

for ($i = strlen($bin_number) - 1; $i >= 0; --$i) {
  $population_count += $bin_number[$i];
}

echo "Population Count: " . $population_count . "\n";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...