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

25.11.2012, 21:32

Berechnung der Byte inhalte,

Hi Leute,
Ich arbeite gerade das Buch C++ Für Spieleprogrammierer durch. Ich bin da auf seite 40 in der 3. Auflage auf eine Rechnung gestoßen, die ich so nicht wirklich stehen lassen kann. Ich Zitiere,:" DIE ZAHL 65536 ERGIBT SICH AUS DER TATSACHE, DASS EIN UNSIGNED SHORT AUS ZWEI BYTES BESTEHT. PRO BYTE KÖNNEN 256 WERTE DARGESTELLT WERDEN; UND 256*256 ERGIBT SOMIT 65536 MÖGLICHE WERTE.
So ich habe jetzt mal den knackpunkt bei dem ich nicht wirklich weiter komm unterstrichen. es steht da PRO BYTE KÖNNEN 256 werte dargestellt werden. Wieso rechnet man dann um den inhalt von 2 byte zu erhalten 256*256 und nicht wie ich es gelernt habe 256*2 ???????

Wenn ich 2 Schubladen habe mit jeweils 256 fächer berechne ich doch auch 256 Fächer * 2 Schubladen

Ich mein ich könnte ja jetzt hergehen und sagen OK, so ist es und gut. Aber das kann ich nicht. wenn ich etwas lernen möchte dann möchte ich auch verstehen wie das was ich lerne funktioniert, und diese RECHENART passt nicht zu dem was ich kenn oder wie ich es gelernt habe.

ich hoffe ihr könnt mich erleuchten

Ja, ich habe die SUFU benutzt!!!!!!!!!!!!!!!!!!!!!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

25.11.2012, 21:41

Wenn du zwei Bytes hast, die jeweils 256 verschiedene Werte annehmen können, dann gibt es insgesamt 256 * 256 = 65536 verschiedene Kombinationen von Werten, die diese zwei Bytes annehmen können. Du hast nicht zwei Schubladen mit jeweils 256 Fächern, sondern 256 Fächer mit jeweils 256 Unterfächern... ;)

http://de.wikipedia.org/wiki/Abz%C3%A4hl…ur.C3.BCcklegen

Du hast in deinem 2 Byte short 16 Bit, die jeweils einen von zwei Werten annehmen können. Insgesamt ergibt das 2^16 = 65536 verschiedene mögliche Kombinationen von Einsen und Nullen.

3

25.11.2012, 21:45

ok, danke dir für deine erklärung! :thumbsup:

4

25.11.2012, 23:14

Oder vielleicht so: Mit einem Bit kannst du 2 Werte darstellen. Wenn du schon X Bits hast und damit Y verschiedene Werte darstellen kannst, kannst du mit einem Bit mehr genau doppelt so viele darstellen, denn du kannst für jede der Y Kombinationen der ersten X Bit das neue Bit auf 0 oder 1 setzen, und hast damit Y+Y Werte, also 2*Y. Für jedes Bit verdoppelt sich also die Anzahl der Kombinationen, also hat man für 4 bit 2*2*2*2=2^4 Werte.

Ein Byte sind 8 Bit, also 2^8=256 verschiedene Werte. 2 Byte sind 16 bit, also 2^16=2^8*2^8=256*256=65536 (Potenzrechenregeln, die müsstest du kennen).

@dot: Das fragwürdige an Matheartikeln auf Wikipedia ist immer, dass sie zwar meistens korrekt sind, aber für einen, der nie Mathe studiert hat vollkommen unverständlich sind.
Lieber dumm fragen, als dumm bleiben!

5

26.11.2012, 08:13

Ja, das war jetzt verständlich. Ich danke euch!

6

26.11.2012, 08:25

Aber wenn wir hier schon mal dabei sind, hätte ich da noch eine frage, was kann ich mit "einem Wert" Anfangen? Ist das eine Ziffer, Zeichen, Buchstabe, Wert im Sinne von 1?
Beispiel: in ein Byte = 256 Werte kann ich eine Satz mit 256 Buchstaben/Zeichen packen?
Oder kann ich in einen Byte nur bis zu einem Wert von 256 rechnen?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

26.11.2012, 08:32

Du kannst in ein Byte *eine* Zahl oder einen Buchstaben speichern, welche einen Wertebereich von 0 bis 255 besitzt. Wahlweise von -128 bis 127.
Ein Buchstabe ist dabei auch nur eine Zahl: der Index in der ASCII-Tabelle.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

26.11.2012, 09:19

Ein Bit kann einen von zwei verschiedenen möglichen Zuständen annehmen, nennen wir sie 1 und 0. Ein Byte besteht aus 8 Bit. Jedes dieser 8 Bit in unserem Byte kann nun entweder auf 0 oder auf 1 gesetzt sein, also z.B.: 11010011 oder 00100110 oder 10010010 oder 00101010 usw. Insgesamt gibt es 2^8 = 256 verschiedene mögliche Kombinationen. Mit anderen Worten: Ein Byte kann einen von 256 verschiedenen Zuständen annehmen.

Jedem dieser möglichen Zustände kann man nun z.B. eine Zahl zuordnen, oder einen Buchstaben etc. Je nachdem, wie man die Bits in einem Byte also interpretiert, kann ein Byte einen von bis zu 256 verschiedenen Buchstaben oder eine von bis zu 256 verschiedenen Zahlen darstellen. Um einen ganzen Text abzubilden, nimmst du nun eben z.B. für jeden Buchstaben ein Byte...

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dot« (26.11.2012, 09:29)


9

26.11.2012, 10:49

Ok dot, bis hier erst mal danke schön.
Mir geht es eigentlich darum, im Buch steht man muss sich am "Anfang" im klaren sein wieviel Speicher man für diese gerade programmierten Abschnitt benötigt. Ich habe bis jetzt gelernt das ein Int. 1 Byte Speicher frei gibt und nur ganze Zahlen ausgeben kann. Ein Float hat 2 oder 4 Byte (da bin ich nicht sicher) und kann bis 3 Zahlen hinter dem Komma darstellen, und ein doppel hat 8 Byte und kann eben "endlos" hinter dem Komma darstellen. Was hat das Komma hier für eine Faktor das ich wegen einem komma von Int zu Float wechseln muss?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

26.11.2012, 11:01

Uh, ich glaub das solltest du dir nochmal in Ruhe durchlesen, da hast du offenbar einige Dinge noch falsch verstanden. ;)

Ich habe bis jetzt gelernt das ein Int. 1 Byte Speicher frei gibt [...]

Was genau meinst du damit?

Ein Float hat 2 oder 4 Byte (da bin ich nicht sicher) und kann bis 3 Zahlen hinter dem Komma darstellen [...]

float hat 4 Byte und kann ca. 7 signifikante Stellen darstellen (beachte: "Signifikante Stellen" bedeutet etwas anderes als "Zahlen hinter dem Komma").

[...] und ein doppel hat 8 Byte und kann eben "endlos" hinter dem Komma darstellen.

Ein double hat 8 Byte und kann ca. 15 signifikante Stellen darstellen. Wie genau stellst du dir das vor, dass man mit einer endlichen Anzahl an Bits endlos viele Kommastellen darstellen würde?

Was hat das Komma hier für eine Faktor das ich wegen einem komma von Int zu Float wechseln muss?

Ein Integer (char, short, int etc.) kann nur Ganzzahlen darstellen, also keine "Kommazahlen".


Man sollte auch erwähnen, dass die genannten Größenangaben hier nur die typischen Werte für PCs sind. Eigentlich definieren die C und C++ Standards nur gewisse Mindestgrößen...


Aber rein prinzipiell würd ich mich mit diesen Dingen erstmal auch nicht zu lang aufhalten. Wichtig für den Anfang ist, dass es eben Typen gibt, die nur Ganzzahlen darstellen können (int usw.) und Typen, die Gleitkommazahlen darstellen können (float usw.), wobei verschiedene Typen jeweils einfach verschiedene Wertebereiche abdecken.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (26.11.2012, 11:07)


Werbeanzeige