2011-01-07 14 views

Respuesta

19

Un valor entero binario no negativo x es una potencia de 2 si (x&(x-1)) es 0 usando la aritmética de 2 complementos.

Potencias de 2 significa que se ha configurado un bit único.

http://aggregate.org/MAGIC/#Is%20Power%20of%202

EDIT:

Para permitir el caso cero:

bool singleBit = x>0 && (x&(x-1))==0 
+0

: O este me habría ahorrado decenas de líneas de codificación hace un tiempo! No puedo creer que no pudiera pensar en eso, +1 !! :) – Mehrdad

+0

La página vinculada es uno de mis favoritos. Digno de marcar. – spender

+0

esto no funciona para x = 0, se tendrá que comprobar para eso, también. – Timbo

3

En C++:

unsigned long v; 
bool f; // result 
f = v && !(v & (v - 1)); 

Explicación: v & (v - 1) == 0 si solo se establece un bit o v == 0.

0

sólo trató en PHP:

$singleBit = $bits && !($bits & ($bits - 1)); 
Cuestiones relacionadas