Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Platz sparen durch Darstellung der Zahlen zur Basis 64(z.b.) (https://www.delphipraxis.net/6449-platz-sparen-durch-darstellung-der-zahlen-zur-basis-64-z-b.html)

Tiefflieger 10. Jul 2003 23:59


Platz sparen durch Darstellung der Zahlen zur Basis 64(z.b.)
 
mir ist gerade ein gedanke eingefallen:

bei programmen wird ja gern die darstellung der zahlen zur basis 16 (hexadezimal) genommen, ich nehme mal an, um platz zu sparen?

warum treibt man das spiel nicht weiter, und nimmt höhere 2er potenzen (die wohl offensichtlich für computer am einfachsten zu verstehen sind) - warum nimmt man nicht zahlen zur basis 64? die platzersparniss ist doch enorm:

36864 (= 9*64² und 5 Ziffern, die gespeichert werden müssen) zur basis 10 würde z.b.
009 (3 Ziffern, die gespeichert werden müssen) zur basis 64 entsprechen

bei größeren zahlen wird die anzahl der ziffern, die man bei 64-ären zahlen im gegensatz zu den 10-ären zahlen speichern muß, noch kleiner, der einzig begrenzende Faktor ist erstmal die ascii-tabelle, man muß ja irgendwie 64 verschiedene ziffern darstellen können.

ist der rechenaufwand zu groß oder habe ich irgendeinen denkfehler gemacht oder warum wird diese Technik nicht verwendet?

Gast 11. Jul 2003 00:21

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Die Darstellung hexadezimal hat eine andere Bewandnis!

Denk mal nach. 8bit = 1 Byte! Kleinste zusammenhängende Einheit in einem PC. 8bit = 2 Nibble (1 Nibble = 4bit)

Ein Hexadezimal-Digit stellt exakt ein Nibble dar. Zwei Nibble = 1 Byte = 2 Digits = 1 Byte ...

Das erleichtert Rechnen/Umrechnen und die Ansicht von Adressen etc - will heissen ... es geht nicht (allein) um Platzersparnis.

Und jetzt denk' nochmal nach, ob du diese Vorteile auch bei Basis 64 haben würdest ... ich denke nicht ... außerdem kann sich ja keiner 64 ausgedachte Zeichen merken ... macht alles nur komplizierter. Oder hab ich nen Rechenfehler? 26 Buchstaben + 10 Ziffern = 36 Zeichen ... wo ist der Rest?

Christian Seehase 11. Jul 2003 00:30

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Moin Tiefflieger,

Zitat:

Zitat von Tiefflieger
bei programmen wird ja gern die darstellung der zahlen zur basis 16 (hexadezimal) genommen, ich nehme mal an, um platz zu sparen?

Ausserdem:
Wo ist da eine Platzersparnis, ausser ich will die Zahl als String speichern? ;-)

JoelH 11. Jul 2003 06:02

hmm,
 
ausser bin speichern haste keine Platzersparnis, denn die CPU muss sich eh alles nach Binär konvertieren und durch deine Idee wird eigentlich alles einfach lansamer !

Tiefflieger 11. Jul 2003 16:21

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Zitat:

Zitat von Assarbad
Die Darstellung hexadezimal hat eine andere Bewandnis!

Denk mal nach. 8bit = 1 Byte! Kleinste zusammenhängende Einheit in einem PC. 8bit = 2 Nibble (1 Nibble = 4bit)

Ein Hexadezimal-Digit stellt exakt ein Nibble dar. Zwei Nibble = 1 Byte = 2 Digits = 1 Byte ...

Das erleichtert Rechnen/Umrechnen und die Ansicht von Adressen etc - will heissen ... es geht nicht (allein) um Platzersparnis.

[...]außerdem kann sich ja keiner 64 ausgedachte Zeichen merken, oder hab ich nen Rechenfehler? 26 Buchstaben + 10 Ziffern = 36 Zeichen ... wo ist der Rest?

naja, man könnte zwischen klein-und groß buchstaben unterscheiden, dann gibts da ja noch die Ä etc...
und warum nimmt man dann nicht z.b. Zahlen zur basis 128, sprich ein digit wäre genau ein byte? was wäre im vergleich zu den hex-zahlen nachteilhaft?

Gast 11. Jul 2003 16:58

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Nope ... 128 sind aber leider noch nicht ein Byte :) ... da fehlt noch ein Bit. Es muessten 256 sein. Und den EASCII-Zeichensatz auswendig lernen nur um dein Zahlensystem zu beherrschen ... na ich weiss ja nicht.
Geschweige denn Umrechnen und Rechnen damit *brr*

So gesehen existiert ja 256bit schon ... indem du einfach alle 256 Zeichen des EASCII Zeichensatzes darstellst.

Tiefflieger 11. Jul 2003 17:20

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
whoops, hab mich wohl verrechnet :-)

ich versteh ja, dass im endeffekt eh alles binär gespeichert werden muß, aber wozu sind dann überhaupt hex-zahlen gut? einfach nur um sachen besser anzeigen zu können?

Gast 11. Jul 2003 17:28

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Besser anzeigen, rechnen und umrechnen. Siehe meine erste Antwort :)

d3g 11. Jul 2003 17:59

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Ein großer Nachteil wäre auch, dass du dir eine solche Zahl nicht merken kannst. Im IPv4-Standard hat man auch eine alternative Darstellung der IP-Adressen gewählt (nämlich die vier Bytes getrennt zu schreiben) anstatt (was platzsparender gewesen wäre) die IP-Adresse hexadezimal zu notieren, weil sich das leichter merken lässt. Bei IPv6 ist die Adresse mit 16 Byte aber so lang geworden, dass man dann doch hexadezimal notiert. Wenn du jetzt aber nur an 10 und nicht an 16 Ziffern gewohnt bist, wirst du Probleme haben, dir eine solche Adresse zu merken. Jetzt stell dir das mal mit 256 Ziffern vor. Nähme man den ASCII-Standard für die Ziffern (was sich ja durchaus anbieten würde), müsste man die Nummer jedes ASCII-Zeichens kennen, um sich den Wert der Zahl im Dezimalsystem vorstellen zu können. Da die Ziffern des Dezimalsystems im ASCII-Standard nicht ihren Wert sondern einen zwischen 48 und 57 ist die Verwirrung beim Auftreten solcher Ziffern dann komplett...

tommie-lie 11. Jul 2003 18:59

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Um mal Tieffliegers Frage zu beantworten, warum man im Quellcode Hexadezimalzahlen benutzt: Es ist manchmal logischer.
Wenn du ein DWORD haben willst, bei dem alle Bits gesetzt sind, wäre das dezimal 4294967295. Hexadezimal aber FFFFFFFF.
Jetzt sag' mir, wo man eher auf den ersten Blick erkennt, daß es 32 Einsen sind... ;-)
Mit Platzersparnis im Code hat und hatte es nichts zu tun, denn der Compiler wandelt es so oder so in Hexadezimalzahlen um, auch bei konstanten oder ähnlichen Dingen geschieht dies. Im Binärcode des Kompilates kommt keine dezimale Zahl vor. Das geschieht auch mit oktalen oder binären Zahlen, bei den Compilern die diese Interpretieren (hier kann delphi aber nur hexadezimale und dezimale Zahlen).

Gast 11. Jul 2003 19:33

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
@tommie-lie:
Ach ... seit wann denn das? Kommt das nicht eher darauf an, welchen Editor du benutzt? Also wenn du willst, schreib ich dir mal einen Hept-Viewer (Basis 7) ... behauptest du dann auch, dass die Zahlen vom Compiler zur Basis 7 abgespeichert werden?

Es ist nach wie vor BINAER!!! :mrgreen: *stirnklatsch (bei tommie-lie)*

Als Auslegungssache kannt du maximal werten, das ueblicherweise Byteweise geschrieben wird, statt bitweise. So gesehen waere es oktale Speicherung. Aber man spricht nach wie vor von Binaerdateien ... und damit halt ichs auch :)

tommie-lie 11. Jul 2003 21:49

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Zitat:

Zitat von Assarbad
Ach ... seit wann denn das? Kommt das nicht eher darauf an, welchen Editor du benutzt? Also wenn du willst, schreib ich dir mal einen Hept-Viewer (Basis 7) ... behauptest du dann auch, dass die Zahlen vom Compiler zur Basis 7 abgespeichert werden?

Es ist nach wie vor BINAER!!! :mrgreen: *stirnklatsch (bei tommie-lie)*

Hmm, wer lesen kann ist klar im Vorteil :roll:
Zitat:

Zitat von meine Wenigkeit
denn der Compiler wandelt es so oder so in Hexadezimalzahlen um, auch bei konstanten oder ähnlichen Dingen geschieht dies. Im Binärcode des Kompilates kommt keine dezimale Zahl vor. Das geschieht auch mit oktalen oder binären Zahlen, bei den Compilern die diese Interpretieren (hier kann delphi aber nur hexadezimale und dezimale Zahlen).

Wie du siehst, habe ich gesagt, daß die Zahlen immer hexadezimal abgespeichert werden, und zwar im Kompilat, der ausführbaren Datei, der EXE, wie auch immer man dieses Produkt des Compilers auch nennen will.
Sie werden zwar vom Prozessor binär verarbeitet, weil nunmal die Transistoren entweder an oder aus sind, aber vom Compiler umgewandelt und letztendlich so belassen werden sie im Hexadezimalformat. Das liegt, wie du sicherlich auch weißt, an den Bytes, die lieber vollständig ausgenutzt werden, mit 256 Werte pro byte, was mit 00..FF ideal machbar ist.
Ich habe nicht geschrieben, daß wenn Zahlen oktal eingegeben werden, diese nachher auch also solche im Kompilat wiederzufinden sind, sondern genau das Gegenteil. Nur kann Delphi Oktalzahlen nicht verarbeiten, warum Borland da gespart hat weiß der Herr allein (allerdings will ich mich nicht beschweren, oktal habe ich nie gebraucht, binär wäre mal praktisch gewesen, aber dann hab' ich's halt umgerechnet :roll:).

Zitat:

Zitat von Assarbad
Als Auslegungssache kannt du maximal werten, das ueblicherweise Byteweise geschrieben wird, statt bitweise. So gesehen waere es oktale Speicherung. Aber man spricht nach wie vor von Binaerdateien ... und damit halt ichs auch :)

Wenn du mir jetzt den Zusammenhang zwischen byteweisen Schreibens und dem oktalen System erklärst, könnte ich vielleicht sogar deinem Gedankengang folgen ;-)
Ein Byte sind 8 bit, daß ist aber noch lange nicht oktal, falls du das meintest.

Christian Seehase 11. Jul 2003 22:00

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Moin tommie-lie,

Zitat:

Zitat von tommie-lie
Wie du siehst, habe ich gesagt, daß die Zahlen immer hexadezimal abgespeichert werden, und zwar im Kompilat, der ausführbaren Datei, der EXE, wie auch immer man dieses Produkt des Compilers auch nennen will.

Wie das?
Dann müssten die Daten als String gespeichert werden.
Die Daten werden als Byte abgespeichert, und zu welcher Zahlenbasis Du Dir die eventuell ansiehst hat damit nichts zu tun.

Gast 11. Jul 2003 22:09

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
@tommie-lie:
Zitat:

Wenn du mir jetzt den Zusammenhang zwischen byteweisen Schreibens und dem oktalen System erklärst, könnte ich vielleicht sogar deinem Gedankengang folgen
Sorry, hast recht.

Nur bei dem obendrueber schreibst du (durch die Blume) Mist :mrgreen:.

Nicht die Ansicht eines Hexeditors mit dem Format auf der Platte verwechseln! Nicht alle Zeichen sind als Zeichen darstellbar (unter DOS ging das zT noch). Deshalb hat man Hex gewaehlt um die Ansicht angenehmer zu machen. Aber es wird NIE Hexadezimal abgespeichert.

Stehst du vielleicht irgendwie grad auf der Leitung? :spin:

tommie-lie 11. Jul 2003 22:29

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Zitat:

Zitat von Assarbad
Nicht die Ansicht eines Hexeditors mit dem Format auf der Platte verwechseln! Nicht alle Zeichen sind als Zeichen darstellbar (unter DOS ging das zT noch). Deshalb hat man Hex gewaehlt um die Ansicht angenehmer zu machen. Aber es wird NIE Hexadezimal abgespeichert.

Stehst du vielleicht irgendwie grad auf der Leitung? :spin:

Ahh, jetzt versteh' ich was du willst! :idea:
Jo, auf der Festplatte wird auch binär gespeichert, entsprechend den Ferropartikeln auf dem Träger.
Irgendwiee habe ich da tatsächlich was verwechselt zu haben.
Aber wie dem auch sei, der Compiler wandelt alles in das gleiche Zahlenformat um (jetzt sag' ich auf jeden Fall nichts falsches *g*).

Und der Compiler wandelt auch nicht ins Hexadezimalformat um, auch richtig.
Naja, müde, kaum geschlafen, Augen kaum offen, halb tot, was willst du von mir erwarten? Das ist halt das leidige Schülerleben :(

Gast 11. Jul 2003 22:31

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Alles Ausreden ... und ein langweiliger 50001. Platz fuer Dich :mrgreen:

Hier ist die 50000

tommie-lie 11. Jul 2003 22:42

Re: Platz sparen durch Darstellung der Zahlen zur Basis 64(z
 
Zitat:

Zitat von Assarbad
Alles Ausreden ...

Mist, durchschaut...
Aber ich hatte wirklich irgendwas nicht ganz verstanden. Ich dachte zum Beispiel auch, daß Tiefflieger die Hexadezimalnotation im Quellcode meint, bis mich eben jemand anderes darauf hingewiesen hat, daß er sich wahrscheinlich auf Computer, bzw deren Speicherverfahren, allgemein bezog :?

Zitat:

und ein langweiliger 50001. Platz fuer Dich :mrgreen:
Auch wenn ich darauf nicht geachtet habe, war es doch kanpp *g*


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz