2011-01-07 15 views

Antwort

19

Ein nicht negativer binärer ganzzahliger Wert x ist eine Potenz von 2, wenn (x&(x-1)) 0 ist, wobei die 2er-Komplement-Arithmetik verwendet wird.

Die Stärke von 2 würde bedeuten, dass ein einzelnes Bit gesetzt ist.

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

EDIT:

Damit für den Null Fall:

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

: O das mir vor einer Weile von Codierung zig Zeilen gespeichert haben würde! Kann nicht glauben, dass ich nicht darüber nachdenken konnte, +1 !! :) – Mehrdad

+0

Die verlinkte Seite gehört zu meinen Favoriten. Es lohnt sich, Lesezeichen zu setzen. – spender

+0

Dies funktioniert nicht für x = 0, das müssen Sie auch überprüfen. – Timbo

3

In C++:

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

Erläuterung: v & (v - 1) == 0, wenn nur ein Bit gesetzt ist oder v == 0.

0

versuchte es einfach in PHP:

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