Просто из любопытства, как вы можете сказать, если число x является степенью двух (x = 2 ^ n) без использования рекурсии.
Спасибо
Ответ 1
Один из способов - использовать побитовое И. Если число $x равно двум (например, 8 = 1000), оно не будет иметь битов, общих с его предшественником (7 = 0111). Поэтому вы можете написать:
($x & ($x - 1)) == 0
Примечание. Это даст ложное положительное значение для $x == 0.
Ответ 2
Вычтите 1 из числа, затем и его с исходным номером. Если результат равен нулю, это значение равно двум.
if (((n-1) & n) == 0) {
// power of two!
}
(извините, мой PHP ржавый...)
Ответ 3
Если это сила 2? Ну, один из способов - преобразовать его в двоичный файл и проверить наличие только 1 1...:
$bin = decbin($number);
if (preg_match('/^0*10*$/', $bin)) {
//Even Power Of 2
}
Ответ 4
Для полноты, если число является поплавком, вы можете проверить, имеет ли он силу в два, если укусить, если мантисса - все нули: