Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Di 30.01.18 01:14 
Hallo,

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

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Di 30.01.18 01:48 
Das Dach ist ein XOR operator:

ausblenden 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;
ausblenden Quelltext
1:
2:
3:
00001010 ^
00001001 =
00000011

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)


Zuletzt bearbeitet von Symbroson am Di 30.01.18 01:51, insgesamt 2-mal bearbeitet

Für diesen Beitrag haben gedankt: GuaAck
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 30.01.18 01:49 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: GuaAck
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 31.01.18 00:39 
- Nachträglich durch die Entwickler-Ecke gelöscht -
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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