Array Elemente vertauschen
-
Alex_H schrieb:
oenone schrieb:
oder per xor ohne temporäre variable, falls du speicher sparen willst
Das klappt aber nicht für alle Typen.
Gruß Alex
Aber für alle für die es einen gleichgroßen Integertyp gibt. O.K. das wird dann böses gebastel, aber es geht. Schneller dürfte wohl eh die kopiererei sein.
-
Alex_H schrieb:
oenone schrieb:
oder per xor ohne temporäre variable, falls du speicher sparen willst
Das klappt aber nicht für alle Typen.
Gruß Alex
was speicherst du schon in arrays? integer, char, pointer... für anderes machts nicht viel sinn, da du hier lieber mit pointer arbeitest um speicher zu sparen.
auf bald
oenone
-
Nur aus Neugier, wie würde das z.B. für zwei float aussehen?
Gruß Alex
@TactX
<klugscheiß> Wenn ich es erst in einen anderen Typ umwandle, geht es nicht für alle Typen </klugscheiß>
-
ja, gut.. bei fließkommazahlen wirds problematisch.
auf bald
oenone
-
ähm neee, bei gleichen basistypen gehts prima.
float a = 20, b = 70; printf("a = %f, b = %f\n", a, b); a ^= b; b ^= a; a ^= b; printf("a = %f, b = %f\n", a, b);
es geht auch "a ^= b ^= a ^= b;" *g*
sorry, muss mich korrigieren. der compiler lässt das nicht zu
dafür aber das
(nur für 32bit große datentypen)#define SWAPL(a,b) (*(long*)(&a) ^= *(long*)(&b) ^= *(long*)(&a) ^= *(long*)(&b)) float a = 20.7, b = 70.2; printf("a = %f, b = %f\n", a, b); SWAPL(a,b); printf("a = %f, b = %f\n", a, b);
-
c.rackwitz schrieb:
ähm neee, bei gleichen basistypen gehts prima.
float a = 20, b = 70; printf("a = %f, b = %f\n", a, b); a ^= b; b ^= a; a ^= b; printf("a = %f, b = %f\n", a, b);
es geht auch "a ^= b ^= a ^= b;" *g*
sorry, muss mich korrigieren. der compiler lässt das nicht zu
Ähmm, ja... geht wunderbar
So geht's schon:
float a,b; a = 3.14; b = 0.01; *(int *)&a ^= *(int *)&b; *(int *)&b ^= *(int *)&a; *(int *)&a ^= *(int *)&b;
-
TactX schrieb:
c.rackwitz schrieb:
...
sorry, muss mich korrigieren. der compiler lässt das nicht zuÄhmm, ja... geht wunderbar
So geht's schon:
...ich hab doch gesagt, dass ich mich korrigieren musste, dass der compiler das nicht zulässt und dann hab ich noch nen edit gemacht, weil ich es mit einem macro hinbekommen hab...
-
c.rackwitz schrieb:
ich hab doch gesagt, dass ich mich korrigieren musste, dass der compiler das nicht zulässt und dann hab ich noch nen edit gemacht, weil ich es mit einem macro hinbekommen hab...
Sorry, das hätte ich natürlich wissen müssen. Vor allem weil dein edit _nach_ meinem Beitrag da war
-
...
aber nicht der erste edit, wo ich bereits gesagt hatte, dass es nicht funktioniert. hast mich sogar zitiert und es einfach überlesen... gratuliere.
-
Ups, stimmt. Hab ich echt übersehen. Peinlich