Bitte ein Bit
-
unsigned invert(unsigned x, int p, int n) { unsigned z, q; z = q = x; x = x & (~0 << (p+1)); q = q | (~0 << n); q = ~q; q = q << (p+1-n); z = z & ~(~0 << (p+1-n)); x |= q; x |= z; return x; }
Die Funktion soll ab p, n Bits komplementieren. Funktioniert auch bei einigen
Zahlen, aber bei z.B.invert (2,1,1);
Versagt meine Funktion. Hat jemand einen Tip ?
Danke.
-
mask = ...000111...11100... // Maske, wo die umzukehrenden Bits 1 sind inverted = x ^ mask;
Wäre jetzt meine schnelle Überlegung.
-
Optimizer schrieb:
mask = ...000111...11100... // Maske, wo die umzukehrenden Bits 1 sind inverted = x ^ mask;
Wäre jetzt meine schnelle Überlegung.
Jetzt geht's, danke.
q^=q;
-
das mit dem q^=q; einfach ignorieren
-
Ok ich hab's (der Code kann nat. noch verbessert werden).
q = q >> (p+1-n);
man muss zuerst bei q noch ab p, die n Bits ganz nach rechts schieben.
puh.....