Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - C zu Delphi (Wer kennt dieses Zeichen ^ in C )
rcracer - Mo 15.09.08 20:37
Titel: C zu Delphi (Wer kennt dieses Zeichen ^ in C )
Hallo Leute,
ich hab folgende Funktion aus dem Internet für C
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| unsigned find_fast(unsigned u) { unsigned a, b, r; u += 0xe91aaa35; u ^= u >> 16; u += u << 8; u ^= u >> 4; b = (u >> 8) & 0x1ff; a = (u + (u << 2)) >> 19; r = a ^ hash_adjust[b]; return r; } |
Diese habe ich mit einem C2Pascal Editor zu diesem gemacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function find_fast(u: Word): Word; var a, b, r: Word; begin
u:= u + $e91aaa35; u:= u xor u shr 16; u:= u + u shl 8; u:= u xor u shr 4; b := (u shr 8) and $1ff; a := (u + (u shl 2)) shr 19; r := a ^ hash_adjust[b]; result:= r; end; |
Jedoch funktioniert
Delphi-Quelltext
1:
| r := a ^ hash_adjust[b]; |
nicht.(Fehlermeldung beim Compilieren)
(hash_adjust[] ist vom Typ Word)
Ich verstehe leider auch nicht, was ^ in diesem Fall macht.
Ich höffe es findet sich jemand hier, der auch mit C etwas erfahrung hat. Danke
Gausi - Mo 15.09.08 20:40
In diesem Zusammenhang würde ich das ^ aus dem C-Code mit XOR nach Delphi übersetzen - so wie es an den anderen Stellen auch gemacht wurde. ;-)
Fighter#1 - Mo 15.09.08 20:41
Afaik ist in C ^ <-- Dieses Zeichen das selbe wie XOR in Delphi
(Du hast es oben doch schon so implementiert(?))
Delphi-Quelltext
1:
| r := a xor hash_adjust[b]; |
so soltle die letzte Zeile sein
nagel - Mo 15.09.08 20:41
Hab zwar wenig Ahnung von C, müsste aber XOR sein.
... verdammt, zu langsam ;)
BenBE - Mo 15.09.08 21:33
Und jetzt noch mal die Bestätigung von jemandem, der häufiger C programmiert:
Ja, der Operator
^ steht für
xor.
Edit: Ach ja, kurze Anmerkung:
rcracer hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function find_fast(u: Word): Word; var a, b, r: Word; begin
u:= u + $e91aaa35; u:= u xor u shr 16; u:= u + u shl 8; u:= u xor u shr 4; b := (u shr 8) and $1ff; a := (u + (u shl 2)) shr 19; r := a ^ hash_adjust[b]; result:= r; end; |
|
Du solltest zwingend darauf achten, dass Du bei der Übersetzung der Kurz-Operatoren Klammern setzt, wenn rechts ein Ausdruck steht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function find_fast(u: Word): Word; var a, b, r: Word; begin
u:= u + $e91aaa35; u:= u xor (u shr 16); u:= u + u shl 8; u:= u xor (u shr 4); b := (u shr 8) and $1ff; a := (u + (u shl 2)) shr 19; r := a ^ hash_adjust[b]; result:= r; end; |
C und Delphi haben teilweise komplett unterschiedliche Klammerungsregeln, gerade was die Bitoperatoren und Addition\Subtraktion angeht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!