Kann mir jemand das Makro erklären ???
-
Hallo,
also in einem Quellcode den ich verstehen sollte wir folgendes Makro benutzt:
double x; #define _D0 3 #define _DSIGN 0x8000 #define DSIGN(x) (((unsigned short *)&(x))[_D0] & _DSIGN)
Das steht natürlich nicht so da sondern ist in der xmath.h verstreut, und x ist halt ein double, das hab ich halt dazu geschrieben.
Ich habe von Makros noch nie so richtig Ahnung gehabt, waere also echt dankbar wenn mir jemand erleutern koennte was da gemacht wird.Danke
Entyl Sa
-
Entyl_Sa schrieb:
double x; #define _D0 3 #define _DSIGN 0x8000 #define DSIGN(x) (((unsigned short *)&(x))[_D0] & _DSIGN)
Das Makro macht doch gar nichts weltbewegendes. Du musst nur x, _D0 und _DSIGN einsetzen. Wenn also jemand DSIGN(x) schreibt, wird das zu
(((unsigned short*)&(x))[3] & 0x8000)
expandiert.
HTH
-
Also wie ein Preprozessor arbeitet weis ich, deshalb habe ich die #defines rausgesucht und dazu geschrieben.
(((unsigned short *)&(x))
erlaubt es das Bitmuster des doubles als ein unsigned short[4] zu sehen.
Prüft dann wohl das Vorzeichenbit des doubles mit & 0x8000 und liefert dann nur 0x0000 oder 0x8000 zurueck? ist das schon alles? hab ich das richtig verstanden?
Entyl Sa
-
Genau. Der &-Op verknüpft bitweise und. 0x8000 ist binär eine 1 mit 15 nullen. In einem Double steht
im höchsten Bit das VZ. Der Ausdruck ergeibt eins, wenn das VZ-Bit gesetzt ist und null, wenn es das
nicht ist. Daher auch der Name des Makros DSIGN wie DoubleVorzeichen