Entwickler-Ecke

Alle Sprachen - Alle Plattformen - Problemchen C --> Delphi: "^="


GuaAck - Di 30.01.18 01:14
Titel: Problemchen C --> Delphi: "^="
Hallo,

ich möchte ein paar Zeilen C-Code in Pascal übersetzen, hänge aber bei folgender Zeile im C-Code:


C++-Quelltext
1:
  x ^= (x <<  7) & 0x9D2C5680;                    


Delphi-Quelltext
1:
  x := x ??? ((e SHL 7AND $9D2C5680);                    


Die rechte Seite ist unproblematisch. Aber was bedeutet der Compound-Operator. Der sollte x mit der rechten Seite potenzieren. Aber der Ausdruck rechts kann Milliarden erreichen, dann dauert die Berechnung sehr lange, das scheint mir nicht plausibel.

Hat jemand einen Tipp?

Gruß
GuaAck


Symbroson - Di 30.01.18 01:48

Das Dach ist ein XOR operator:


C++-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>

char *to2(int x)  {
  char *b = malloc(9), *p = b, z;
  for (z = 128; z > 0; z >>= 1)
    *p++ = (x & z) ? '1' : '0';
  return b;
}

int main() {
  printf("%s ^\n%s =\n%s\n"
  to2(0b1010), to2(0b1001), 
  to2(0b1010 ^ 0b1001));
}

output;

Quelltext
1:
2:
3:
00001010 ^
00001001 =
00000011


Delete - Di 30.01.18 01:49

- Nachträglich durch die Entwickler-Ecke gelöscht -


GuaAck - Mi 31.01.18 00:26

Danke Frühlingsrolle,

ja, XOR war mein erster Ansatz. Gab aber ein falsches Ergebnis. Mit Google habe ich dann das mit dem Exponenten (für C) gefunden, aber das ist wohl falsch gewesen.

XOR ist plausibel, also bestätigt: Nicht alles glauben, was man mit Google findet.

Inzwischen habe ich auch die originale Beschreibung zu dem Algorithmus gelesen, da steht klar XOR drin.

Danke,
Gruß GuaAck


Delete - Mi 31.01.18 00:39

- Nachträglich durch die Entwickler-Ecke gelöscht -


GuaAck - Do 01.02.18 01:32

Frühlingsrolle,

Du bist genial, ja genau, Mersenne-Twister.

Soll aktuell der beste Random-Generator sein, deshalb wollte ich ihn in meine Delphi-Bilbliothek übernehmen.

Mein Fehler war trivialer Art, jetzt erzeugt meine Routine die gleichen Werte, wie der Original C-Code.

Gruß
GuaAck