000
17.02.2011, 11:14 Uhr
ao
(Operator)
|
Moin zusammen.
Ich brauche einen einfachen Test, mit dem ich prüfen kann, ob ein Zahlenwert (unsigned int) eine Zweierpotenz ist oder nicht. Eingefallen ist mir folgendes:
C++: |
bool isPowerOfTwo (unsigned int n) { return (n | (n - 1) == n + (n - 1)); }
|
Erklärung: Wenn n eine Zweierpotenz ist, dann sind n und (n-1) in den Eins-Bits disjunkt, und n | (n-1) ist dasselbe wie n + (n-1). Ist n keine Zweierpotenz, dann ist das nicht der Fall.
Stimmt ihr mir zu, oder habe ich was übersehen?
BTW: Wer war das noch, der behauptet hat, Arithmetik und Bitfummelei hätten im gleichen Ausdruck nichts verloren? |