function highest_power_of_2_less_or_equal_to_n($n) {
$power = 0;
for ($i = $n; $i >= 1; $i--) {
// $i == power of 2 ?
if (($i & ($i - 1)) == 0) { // 10 (1010) 9 (1001) 8 (1000) 7 (0111)
$power = $i;
break;
}
}
return $power;
}
$n = 17;
echo highest_power_of_2_less_or_equal_to_n($n) . "<br >";
$n = 10;
echo highest_power_of_2_less_or_equal_to_n($n) . "<br >";
$n = 64;
echo highest_power_of_2_less_or_equal_to_n($n) . "<br >";
/*
run:
16
8
64
*/