Byte-Bit Erklärungsproblem

Hallo,

eine Freundin von mir muss gerade im Studium so einen kleinen Informatikexkurs machen. Da ich halbwegs bewandert bin in Informatik hat sie mich um Hilfe gebeten doch anscheinend kann ich es nicht wirklich gut erklären. Problem ist folgendes:
1byte = 8 bit werden benötigt um ein Zeichen anzuzeigen. Um Dezimalzahlen 0-9 zu representieren werden jedoch nur 4 bit benötigt. Sie versteht, dass mit 4 bit 16 bzw mehr als 10 Codierungen ermittelt werden können, nicht jedoch warum es dann 8 bit benötigt um ein Zeichen anzuzeigen.

Ich hab ihr bereits gesagt, dass sie Zeichen nicht mit Zahl gleichsetzten soll. Das wenn man die Zahl 6 ausgibt diese als Zeichen (ascii tabelle) ausgegeben wird, wenn man jedoch damit rechnet zB als int das ganze anders angesehen werden muss.
Vielleicht hat jemand eine Idee, wie man das besser erklären kann, bzw. ich hoffe das ich überhaupt richtig liege :eek:
Für eine Darstellung/Skizze/Zeichnung/Erklärung wäre ich sehr dankbar :slight_smile:

dass die Ziffer 6 nach ASCII-Tabelle != ‚6‘ ist finde ich auch schade, hat aber mit der Frage nichts zu tun (vielleicht auch gar nicht aufgeworfen, lese ich nur nebenbei)

0-9 ist doch ein guter Anfang, das sind als Zeichen 10 Stück, dazu 26 Buchstaben sind schon 36,
außerdem will man noch Umlaute usw., Groß/ kleinbuchstaben trennen, noch mehr Sonderzeichen,
so kommt man auf etwas umfangreiche 256 Zeichen-Menge, der Wertebereich von einem Byte,

weil man so viele Zeichen will hat man 1 Byte = 256 als übliche Menge genommen, muss man das noch weiter erklären?
was sonst? 4 Bit = 16 Zeichen wäre recht wenig, 5, 6, 7 sind auch entweder wenig oder unschön ungerade,

8 Bit bietet sich als Vielfaches von 4 Bit, überhaupt als Potenz von 2 doch ziemlich an,
würde man auf ganze 10 Bit gehen verließe man das 2er-System, Umrechnen schwer, Speicheradressierung usw. wird krumm,

keine Ahnung ob Byte = 8 Bit vorher schon ein Thema war, nachzuschlagen (ja, vielleicht die Frage, ich mache es jetzt nicht :wink: )


die Story mit Frage von jemand anderen usw. kannst du dir als Gast doch sparen, niemand kennt nicht, niemand kann das überprüfen,
soll deswegen die Frage interessanter, eher beantwortet werden?

ob Wahrheit oder nicht, irrelevant,
Höflichkeit, gute Sprache usw., das kann natürlich nicht schaden

‚Idee, wie man das besser erklären kann‘
na ja gut…, aber das kann man auch begrenzen auf ‚wie anderen zu erklären?‘ :wink:

Sie hat ja auch recht. Es benötigt kein ganzes Byte um Zeichen anzuzeigen. Wenn man nur dezimale Zeichen verarbeiten möchte, könnte man auch binär codierte Dezimalzahlen verwenden (BCD). Und wenn man einen Multibyte Zeichensatz verwendet, dann benötigt man gegebenenfalls auch mehr als nur ein Byte. Oder gar eine variable Anzahl an Bytes pro Zeichen.

Der Grund, weshalb man „ein Byte für die Darstellung einer Ziffer“ benötigt ist, dass diese Ziffer in ASCII codiert ausgegeben werden soll. Anderes Codierverfahren => ggf. andere Anzahl Bits pro Ziffer (siehe Ausführungen oben).

ach, in die Richtung geht es,
tja, sogesehen kann man Byte verwenden weil das in Programmiersprachen als Datentyp unterstütz wird,
oder normale Programme wie Texteditioren nunmal allgemein funktionieren, für alle Zeichen des ASCII-Satzes, nicht speziell für Zahlen

wenn man will kann man auch Zahlen optimaler speichern, in einen long von 64 Bit passen 18 Ziffern ~ 3.5 Bit,
wenn auch noch mehr Ziffern sicher umständlich auf longs zu verteilen und zurückzugewinnen sind,

mit einem eigenen byte, komplette Kontrolle über den Speicher, kann man die optimale Grenze ausnutzen
oder das Byte per Hexadezimal recht komfortabel für zwei Ziffern nutzen = 4 Bit

edit:

nicht jedoch warum es dann 8 bit benötigt um ein Zeichen anzuzeigen.

die Anzeige ist zeichenbasiert,
sie für Ziffern zu optimieren wäre theoretisch möglich, wiederum 6 = ‚6‘ ein Thema, aber doch kein Thema,
und wenn wäre das ‚e‘ Optimierung wert, zumindest im Deutschen, aber auch Englisch

Ich versuch’s mal:

Die Ziffern mit denen wir rechenen sind für den Computer keine Ziffern, sondern Bilder, mit denen er erstmal nichts anfangen kann.
Die Übersetzung einer Computerzahl in ein Bild, das wir als Ziffer erkennen heißt Kodierung.
Eine Kodierung legt also fest, welche Komputerzahl welchem Bild entspricht.

Die Kodierung muss aber nicht nur Ziffern auf die Computer-Zahlen abbilden sondern auch Buchstaben und Satzzeichen (und anderes mehr). Für das englische Alphabet benötigt man Zuordnumgen für 2*23 Buchstaben (große und kleine) sowie 10 Ziffern und eine Hand voll Satzzeichen. Man benötigt also mindestens 70 Plätze in der Übersetzungstabelle. Um die Zahl 70 binär darstellen zu können benötigt man 7 Bit (2^6 = 64 < 70 < 2^7=128). Nun ist 7 eine ungerade Zahl und passt damit gar nicht zu der auf der 2 basierenden Arbeitsweise von Computern, so dass es naheliegend ist, mit 8 Bit zu arbeiten.

Warum die Kodierungen für die Ziffern nicht bei 0 sondern bei 48 beginnen ist mir nicht bekannt. Die 48 selbst hat aber wieder ihren Sinn wenn man weiß, dass die hexadezimale Darstellung dieser Zahl 0x30 und ihre binäre Darstellung 110000b ist. Mittels der logischen &-Verknüpfung kann man also eine kodierte Ziffer sehr schnell in eine Computerzahl umwandeln, mit der der Computer dann rechnen kann (Das Bild einer 3 hat die Kodierung 51 -> 0x33 -> 110011b, 110011b&001111b=000011b -> 3) .

bye
TT

~~[quote=Timothy_Truckle;71025]Mittels der logischen &-Verknüpfung kann man also eine kodierte Ziffer sehr schnell in eine Computerzahl umwandeln[/quote]
Eher mit einer Shiftoperation à la if (c & 0xf != 0) int zahl = c >> 4;

P. S.: die obige Codezeile ist in einer Javaanwendung nicht unbedingt empfehlenswert.~~

Edit: streiche Beitrag - habe Denkfehler :wink:

na - ist jetzt eine Diskussiongrundlage ob man das ganze mitels & macht oder pauschal 0x30 dazu/ab rechnet. Wieso aber ‚A‘ bei 0x41 bzw ‚a‘ bei 0x61 beginnt erschließt sich mir nicht.

Ansonsten gilt: der aus den Bits resultierende ASCII-Zeichensatz ist nur für unser kleines menschliches Gehin was mit dieser extremen Abstraktion von Bits nicht mal annährend klar kommt.

[quote=mogel]Wieso aber ‘A’ bei 0x41 bzw ‘a’ bei 0x61 beginnt erschließt sich mir nicht.[/quote]Weil ‘A’ der erste Buchstabe ist und nicht der nullte… ;o)

bye
TT

0 ist die erste Zahl :o)

Ich meine mich zu erinnern, von exotischen Systemen gelesen zu haben, bei denen ein Byte aus sechs Bits, auf anderen aus neun Bits bestand. Allerdings finde ich dazu gerade nichts, vielleicht war es auch eine urbane Legende.