AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language plattformabhängigen Integertypen LongInt und LongWord
Thema durchsuchen
Ansicht
Themen-Optionen

plattformabhängigen Integertypen LongInt und LongWord

Ein Thema von himitsu · begonnen am 8. Jan 2018 · letzter Beitrag vom 9. Jan 2018
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#21

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 20:00
Der gleiche Code tut doch auch heute, egal ob Windows 32 oder 64-Bit immer noch das absolut richtige, oder?
Nein?

Wenn die Funktion auf 32 Bit ausgelegt war und man deswegen auch absichtlich LongInt anstatt Integer verwendet hatte, aber der Typ jetzt plötzlich 64 Bit ist, dann funktionieren Überläufe und Bitschieberreien nicht mehr richtig.
In Nicht-Windows-64-Bit sind diese Typen aber nun in ihrer Funktion vertauscht.
Unter 16&32 Bit waren sie andersrum, bei 32 Bit und im Windows waren sie gleich und unter 64 Bit nun sorum (außer Windows).
> 16 und 32 Bit : Integer = platformabhängig und LongInt = 32 Bit
> 32 und 64 Bit : Integer = 32 Bit und LongInt = platformabhängig (außer Win64)

Aus einen CRC32 wird ja auch nicht gleich ein CRC64, nur weil man den mit 64 Bit kompilert.
$2B or not $2B

Geändert von himitsu ( 8. Jan 2018 um 20:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#22

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 20:37
Ich denke nicht, dass sich unter Windows für dich etwas ändert. Diese skalierenden Integertypen sind nicht so ungewöhnlich, wenn man schonmal mit C/C++ gearbeitet hat. Da garantieren die Standardtypen (short, long, long long, etc) auch jeweils nur MINDESTENS die Größe von (16, 32, 64-Bit).

Unter Windows sehen die Typen mit EXAKTER Größe allerdings trotzdem immer wie folgt aus:
Code:
typedef signed char       int8_t;
typedef short             int16_t;
typedef int               int32_t;
typedef long long         int64_t;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#23

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 21:43
Nun, dann müssen himitsu und meine Wenigkeit sich eben geirrt haben. Ist alles eben doch konsequent, logisch und einheitlich.
Ich verstehe den Einwand jetzt nicht. Es ist schon seit einigen Versionen möglich, die Typen Int8, Int16, Int32, Int64 und die zugehörigen UInts zu verwenden. Für native Typen gibt es dann noch NativeInt und NativeUInt, während für die Angleichung an einen Pointer die Typen IntPtr und UIntPtr zur Verfügung stehen. Man muss sie halt nur benutzen. Ich hatte dich anfangs so verstanden, daß dies genau das ist, was du vorgeschlagen hast. Ich habe lediglich darauf hingewiesen, daß es das bereits gibt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#24

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 9. Jan 2018, 08:03
Ich darf genüßlich auf die String vs. WideString/AnsiString Diskussion verweisen, die damals™ entbrannte, als Delphi "plötzlich" Unicode konnte. In Licht dieser Erfahrungen macht es keinen Sinn ungeprüftes Bitgeschiebe zu praktizieren, oder sich auf mögliche Überläufe zu verlassen. Man arbeitet als Entwickler nunmal nicht ohne Netz und doppelten Boden. Es gibt zu jedem dieser Typen die Möglichkeit, seine Bittigkeit zur Laufzeit zu ermitteln. Berücksichtigt man das, gibt es keine Probleme, wenn man die Standardtypen ohne spezifizierte Bittigkeit nimmt.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#25

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 9. Jan 2018, 10:19
Also ich verstehe ihn schon, Überläufe und Bitgeschubse möchte man unter Umständen schon gerne haben.

Wenn man immer auf allen Plattformen die gleichen Typen haben möchte braucht man ein Laufzeitsystem wie .NET oder Java. Delphi ist immer gerne "native", deshalb richten sich Standard-Typen der Delphi-RTL verständlicherweise nach der Plattform.

Möchte man (CRC ist ein gutes Beispiel) einen Typ mit Länge X muss man das auch sagen (Int32, UInt8, ...)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#26

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 9. Jan 2018, 11:16
Ich habe nichts gegen Überläufe und Bitgeschupse. Aber bitte nicht ungeprüft. Überalls sonst wird man gemahnt die Grenzen eines Objekts aktiv zu beachten. zB bei Schleifen durch ein Array eben über Low(Array) bis High(Array) zu gehen und nicht blind etwa von 1 bis length(Array) oder ähnliches.

Hier muss man eben aktiv die "Bytigkeit" seines Integers beachten/prüfen/auswerten, um zu wissen, ab wann oder ob man es mit einem Überlauf zu tun haben könnte.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#27

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 9. Jan 2018, 11:40
Hier muss man eben aktiv die "Bytigkeit" seines Integers beachten/prüfen/auswerten, um zu wissen, ab wann oder ob man es mit einem Überlauf zu tun haben könnte.
Und genau da lag ja mein Problem, dass sich eigentlich (ehemals) per Definition feste Typen nun plötzlich platformabhängig verhalten.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#28

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 9. Jan 2018, 12:29
Ich verstehe ja durchaus Dein Problem, und kann Deine Verärgerung absolut nachvollziehen. Ich bin andererseits aber nie auf die Idee gekommen, nachzuschauen welche Typen jetzt festgemauert sind und welche nicht. Ich prüfe nach dem String-Debakel von 2009 bei solchen Sachen immer zur Laufzeit ob und wie die Rahmenbedingungen erfüllt sind. Ich muss allerdings noch erwähnen, daß ich keine Bitshifts oder so mache.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#29

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 9. Jan 2018, 12:45
Ich prüfe nach dem String-Debakel von 2009 bei solchen Sachen immer zur Laufzeit ob und wie die Rahmenbedingungen erfüllt sind.
Ich prüfe das in einem einzigen Unit-Test ob die Annahmen stimmen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#30

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 9. Jan 2018, 13:04
Ich prüfe nach dem String-Debakel von 2009 bei solchen Sachen immer zur Laufzeit ob und wie die Rahmenbedingungen erfüllt sind.
Ich schreibe ja einige Komponenten, welche nach Möglichkeit auf allen Plattformen laufen sollen, mit dem Problem, dass ich aktuell kein Android mehr kompilieren kann.
Linux mir immer zu teuer sein wird und ich auch keine iProdukte habe.

Also muß ich ja erstmal blind darauf vertrauen, dass es so auch wo anders funktionieren könnte.


Ich nutze auch lieber Delphi/Pascal-Standard-Typen (wie eben LongInt) und versuche die Codes so zu schreiben, dass Compilerabhängiges auch compilerabhängig ist und Festes eben fest.
Da ist es jetzt kein Vorteil, wenn compilerabhängige Typen plötzlich fix sind und fixe Typen manchmal sich verändern.

Als 64 Bit raus kam, da stand auch in den Entwicklerhinweisen, dass der Integer nun fest ist, aber ich kann mich nicht erinnern sowas über den LongInt gelesen zu haben.
Sah es nur zufällig, als ich wegen was Anderem da rein sah und hoffte es könnte auch ein Fehler in der Hilfe sein.
$2B or not $2B

Geändert von himitsu ( 9. Jan 2018 um 13:11 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz