Don P: Wie prüfe ich eine Zahl auf Zweierpotenz (2,4,8,16,...)?

Beitrag lesen

Hallo,

Dann liefert IMHO der Vergleich
~(n^m) == n
true, falls n eine Zweierpotenz ist, andernfalls false.

Nein, dieser Ausdruck liefert dann immer true. Denn die XOR-Verknüpfung mit dem vorzeichenlos größten darstellbaren Wert ist, banal ausgedrückt, eine bitweise Negation.

Meinst du wirklich? XOR liefert doch nur dann 1, wenn die Bits verschieden sind, sonst 0. Also z.B. so:

n = 0100 (Zweierpotenz)
~0000 sei 1111 (also unsere größte Zahl)

somit:
n XOR m = 1011
und dann negiert:
0100
was wieder unsere Ausgangszahl ist.

Wenn n keine Zweierpotenz ist, kommrn wir aber nicht mehr zur Ausgangszahl zurück, q.e.d.

Gruß, Don P