Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.04.2012, 10:50

2.8 Speicherbedarf der Datentypen

Hallo Leute
In dem Kapitel 2.8 geht es um den Speicherbedarf von Datentypen und auf Seite 39 steht, dass man pro Byte 256 Werte darstellen kann. Und nun schreibt Heiko Kalista, dass man bei 2 Bytes einen Wertebereich von 256 * 256 = 65536 hat. Aber wenn ein Byte 256 Werte hat dann muss man doch rechnen: 256 * 2 oder? Weil wenn ein Byte 256 hat dann müssen zwei doch das doppelte haben und nicht im Quadrat rechnen.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

15.04.2012, 11:50

Nein, das stimmt schon so. Es geht darum wie viele Werte man darstellen kann. Mit einem Byte sind das halt nur 256. Wenn du aber ein zweites Byte hast kannst du für jedes Bit des einen Byte nochmal alle Werte des anderen Byte durchgehen. Kleines Beispiel mit 2 Bit:
Sagen wir ein Byte hätte lediglich 2 Bit, dann könnte man mit einem Byte 4 Werte darstellen, also die folgenden: 00, 01, 10, 11.
Wenn wir jetzt zwei Byte (a je 2 Bit haben), dann sind das bereits 16, weil man für jeden möglichen Wert vom ersten Byte jeden möglichen Wert vom zweiten Byte anhängen kann. Also:
0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111
Siehst du, wie hier jede Kombination de beiden Bytes zusammengesetzt werden? Das gleiche passiert, wenn man Bytes von 8 Bit hat. Und darum ist es im Quadrat und nicht nur verdoppelt.

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

3

15.04.2012, 11:52

Nein, eben nicht 2*256. Überlege dir mal, wie viele unterschiedlichen Kombinationen, wie die Einser und Nuller verteilt sein können, es gibt. Bei 8 Ziffern (ein Byte) wären es 2^8. Bei 2 Byte dementsprechend 2^16. Das ist wie im Dezimalsystem. Mit einer Stelle kannst du maximal 10^1=10 verschiedene Zahlen darstellen, bei zwei Stellen kannst du 10^2=100 Zahlen (0-99) darstellen. Du kannst aber sagen, dass sich der Informationsgehalt bei 2 Bytes verdoppelt. Soll jedes Bit den Zustand eines bestimmten Moduls anzeigen, kannst du mit der doppelten Anzahl an Bytes die doppelte Anzahl an Zuständen anzeigen.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

4

15.04.2012, 12:23

Speicherbedarf und die Anzahl der darstellbaren Zustände hängen nicht linear voneinander ab, sondern exponentiell.
Fügst du ein Bit zu einem Byte hinzu, womit sich der Speicherbedarf um 1/8 (von 8 auf 9 Bit) erhöhen würde, so verdoppelt sich die Anzahl der darstellbaren Möglichkeit.
Ein Byte hat also keinen Speicherbedarf von 256, sondern von 8 Bit. Aber mit 8 Bit lassen sich 2^8 = 256 verschiedene Werte darstellen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

15.04.2012, 12:43

Versucht doch nicht immer alles so unnötig zu verkomplizieren;) Ihr wisst doch nicht wer auf der anderen Seite sitzt. Er ist wohl grad am Anfang und kann deswegen mit vielen Sachen vermutlich nicht zu viel Anfangen. Auch nicht jeder hat Wissen über Bits und Bytes;) Vor allem bein anfänglichen Fragen sollte man nicht zu viel drum herum erklären, da man sonst nur verwirrt. Meine Meinung, aber vielleicht könnt ihr sie ja nachvollziehen;) Ansonsten würde die Frage ja eigentlich beantwortet, Sogar mit einem Beispiel.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

6

15.04.2012, 13:27

Ja ich fänds nett wenn du es mir erklären könntest weil ich die Antworten oben nur teilweise verstanden habe.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

15.04.2012, 13:55

Stell dir das ganze im Dezimalsystem vor.
Du hast einmal einen Zettel auf dem 3 Ziffern passen. Damit kannst du 1000(10³) Verschiedene Zahlen darstellen.(von 000 bis 999)
Wenn du ein Zettel hast auf den 6 Ziffern passen, kannst du 1.000.000(10^6) verschiedene Zahlen darstellen(von 000.000 bis 999.999).
Im Dualsystem ist es das gleiche, nur mit einer anderen Basis. Also bei drei "Ziffern" 2³(8 also von 0 bis 7) und bei sechs "Ziffern" 2^6(64 also von 0 bis 63).
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

15.04.2012, 14:05

drakon hat doch schon ein super Beispiel angegeben;)
Ich versuch sein Beispiel einfach mal weiter zu erläutern. Ein Bit hat zwei Zustände, 0 und 1. Damit kannst du also zwei Werte darstellen. Wenn du eine Variable hast, die 1 Bit groß ist, kann diese Variable zwei Werte speichern. Bool hast du ja vielleicht schon kennen gelernt. Ein bool könnte theoretisch einfach durch ein Bit dargestellt werden. Wenn die Variable dann 0 ist bedeutet das false und wenn sie 1 ist bedeutet das true. Bei C++ ist das zwar intern etwas anders, aber das ist erst mal egal.
Jetzt stell dir eine Variable für Zahlen vor, welche 2 Bit groß ist. Mögliche Zustände sind dann:
00
01
10
11
Du hast ja jetzt zwei Bit, also auch zwei Stellen für die 0 und 1. Da die Variable jetzt Zahlen speichern können soll, müssen wir irgendwie noch festlegen, welcher Zustand der Variable welche Zahl darstellt. Dabei kann man dann sagen:
00 = 0
01 = 1
10 = 2
11 = 3
Wir können mit der Variable also zum Beispiel die Zahlen von 0 bis 3 darstellen. Das mit den Bits macht C++ schon für dich. was diese Bits bedeuten wird auch schon geregelt. Du musst es dann nur noch benutzen. Nun jetzt sind die Zahlen von 0 bis 3 ja nicht besonders spannend. Verdoppeln wir also die größe der Variable von 2 Bit auf 4 Bit:
0000=0
0001=1
0010=2
0011=3
0100=4
0101=5
0110=6
0111=7
1000=8
1001=9
1010=10
1011=11
1100=12
1101=13
1110=14
1111=15
wären jetzt die möglichen Zustände der Variable. Wie du siehst haben wir jetzt nicht 2 sondern vier Stellen für unsere 1 und 0. Ich habe direkt die Werte dafür dahinter geschrieben. Du siehst also dass wir jetzt die Zahlen von 0 bis 15 darstellen können. In unserem Zahlensystem ist das eigentlich genau so. Bei den Bits hatten wir zwei mögliche Zustände nämlich 0 und 1. Bei uns im Dezimalsystem haben wir 10 Zustände nämlich 0 bis 9. Eine einstellige Zahl kann also die Werte 0 bis 9 annehmen. Wenn du jetzt zwei Stellen zulässt, bekommst du von 0 bis 99 also 100 Möglichkeiten.
Die Rechnung für die Möglichkeiten ist recht simpel.

n^m. Wobei n für die Anzahl der Möglichkeiten einer Zahl steht, bei Bit also 2 (0 und 1) bei Dezimal 10 ( 0 1 2 3 4 5 6 7 8 9) und so weiter. m steht dann für die Stellen deiner Zahl. Wenn du eine einstellige Zahl hast, ist m = 1. Wenn du eine zweistellige Zahl hast ist m = 2 und so weiter. Testen wir das mal für unser Beispiel mit den Bits.
Ein Bit hat zwei Zustände ( 0 und 1 ) also ist n = 2. Wir gehen mal für einstellige bis 4stellige Bits durch:
m=1: 2^1 = 2
m=2: 2^1 = 4
m=3: 2^3 = 8
m=4: 2^4 = 16

Für das Dezimalsystem kannst du das dann selbst durchrechnen und überprüfen wenn du möchtest.


Ein Byte besteht jetzt einfach aus 8 Bit, zwei Byte bestehen also aus 16 Bit.
m=8: 2^8
m=16: 2^16

Das kannst du dir jetzt selbst ausrechnen. Dafür darfst du dann auch einen Taschenrechner benutzen;) Sollte aber klar sein denke ich. Das ist zum programmieren erst mal alles eher unwichtig, da es einfach ein bisschen Theorie dahinter ist, als Programmierer sollte man es aber eigentlich wissen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

9

15.04.2012, 14:26

OK ich habs jetzt einigermaßen verstanden wie es geht :)

10

15.04.2012, 14:53

Jetzt hab ich doch nochmal eine Frage stimmt es, dass ich dann bei 4 Bytes 1 048 576 werte zur Verfügung hab?

Werbeanzeige