MSB LSB Die Bitfolge
8 Bit 11111111
1 Byte interpretiert ein Computer als
    01011100    
im Kontext
Hexadezimaldarstellung
Info

Neben Text und Zahlen sind auch Zeitpunkte (engl. timestamp), also eine bestimmte Kombination aus Datum und Uhrzeit, häufig gespeicherte Inhalte von Computern. Ein konkreter Zeitpunkt wäre zum Beispiel „28.11.2018 20:44:21“, wobei die Zeit hier auf Sekunden genau angegeben wird.

Natürlich wäre es möglich diese Information als Text zu speichern. Das hätte allerdings gleich zwei Nachteile: Erstens würde man sehr viel Speicherplatz dafür brauchen (in unserem Beispiel 19 Zeichen, also 19×8 Bit = 152 Bit). Und zweitens wäre das Rechnen mit Zeitpunkten (z.B. die verstrichene Zeit zwischen zwei Zeitpunkten) nicht direkt möglich.

Daher werden Zeitpunkte üblicherweise als Ganzzahl mit Vorzeichen (engl. signed Integer) gespeichert. Die gespeicherte Zahl gibt dabei zum Beispiel die Sekunden nach (bei einem positiven Vorzeichen) oder vor (bei einem negativen Vorzeichen) einem bestimmten (willkürlich) festgelegten Referenz-Zeitpunkt an. Hier ein Beispiel:

Referenz-Zeitpunkt 28.11.2018 20:44:21
Gespeicherte Zahl +92
Zeitpunkt 28.11.2018 20:44:21 = 28.11.2018 20:44:21 +92 Sekunden

In Unix Betriebssystemen wird als Referenz-Zeitpunkt Donnerstag, der 1. Januar 1970, 00:00 Uhr UTC verwendet (und dramatisch auch oft als „die Epoche“ bezeichnet). Die Differenz wird natürlich nicht als eine 8-Bit Zahl, wie in unserem Beispiel, sondern als eine 32-Bit Zahl gespeichert.

Tabellenkalkulationen speichern ein Datum ebenfalls als Offset zu einem bestimmten Referenz-Tag. Die Zahl der Zelle wird als Offset in Tagen interpretiert. Hier sind allerdings nur positve Ganzzahlen (engl. unsigned integer) in den Zellen gültige Daten. Um den Null Tag bei einer Tabellenkalulation zu bestimmen gibt es einen ganz einfachen Trick: Schreib in eine Zelle 0 und ändere das Zellenformat auf „Datum“. In Libre Office Calc ist das Samstag der 30. Dezember 1899. Das lässt sich in den Einstellungen auch anders festlegen. In Microsoft Excel ist das der Tag Null "Samstag der 00. Jänner 1900" (31. 12. 1899 war ein Sonntag und der 1. Januar 1900 war ein Montag?). Datumsangaben vor dem Tag Null werden als Texte gespeichert.

Diese Speicherung von Zeitpunkten hat aber auch Nachteile. Einerseits kann man das Datum nicht direkt ablesen (oder hättest du auf einen Blick erkannt, dass die Unixzeit 1535145642 dem Zeitpunkt 28.11.2018 20:44:21 entspricht?). Es gibt Befehle, die dir die Unixzeit in einer für den Menschen lesbaren Form anzeigen. Das viel größere Problem ist, dass mit jeder Zahl einer fixen Bit-Länge (z.B. 32-Bit) immer nur ein begrenzter Datumsbereich erfasst werden kann. Ist die größte positive Zahl erreicht kommt es zu einem Überlauf und zu einem Rücksprung im Zeitpunkt.

Generell gilt: Ein Bitmuster, also ein bestimmtes Muster aus den Symbolen 0 und 1, hat an sich noch keine Bedeutung! Darum musst du aus der Dropdown-Liste immer zuerst einen Kontext auswählen, bevor du eine Bedeutung für die Bitfolge erhältst. Um das Bitmuster zu verändern, klicke die Ziffern auf der linken Seite an. Jeder Klick invertiert den Zustand (d.h. aus 0 wird 1 und umgekehrt).

Warum schreibt man die führenden Nullen an? Auch wenn 0 und 1 Ziffern sind, symbolisieren eigentlich die Zustände von Schaltern, also ob ein Schalter ein- oder ausgeschaltet ist. 11111111 bedeutet also:

Schalterstellung Bit 7 Schalterstellung Bit 6 Schalterstellung Bit 5 Schalterstellung Bit 4 Schalterstellung Bit 3 Schalterstellung Bit 2 Schalterstellung Bit 1 Schalterstellung Bit 0

Durch das Schreiben der führenden Nullen erhalten wir immer ein vollständiges Bitmuster und wir wissen immer wie viele Schalter im Spiel sind.

Wenn wir mit unterschiedlichen Stellenwertsystemen arbeiten, kann es leicht zu Verwechslungen kommen. Damit immer klar ist, nach welcher Basis eine Folge von Ziffern zu interpretieren ist, verwendet man folgende Schreibweisen: (xxx)10, wenn die Ziffern xxx nach dem Dezimalsystem (auch Zehnersystem oder dekadisches System) und (xxx)2, wenn die Ziffern xxx nach dem Dualsystem (auch Zweiersystem oder Binärsystem) zu interpretieren sind.

Jeder Prozessorkern arbeitet mit einer fixen Länge von Bitfolgen. Diese Länge heißt Wortgröße (8, 16, 32 oder 64 Bit). Die Wortgröße in unseren Beispielen ist immer 8 Bit = 1 Byte. Aktuelle Prozessorkerne arbeiten mit einer weit größeren Wortlänge von bis zu 64 Bit = 8 Byte (Quadruple Word). Ein Datenwort wird vom Prozessor immer als Ganzes verarbeitet.

Selbst eine kurze Bitfolge von nur 8 Bit kann schon unübersichtlich sein, daher geben Informatiker Bitmuster gerne als Hexadezimalmuster an. Dabei werden immer 4 Bit = 1 Halbbyte oder Nibble zu einer Ziffer zusammengefasst. Du kannst den „Hex-Code“ des Bitmusters über die Checkbox rechts oben ein- und ausblenden.

Eigentlich geht es immer nur darum, einem Bitmuster von Nullen und Einsern (d.h. Kombination von Schalterzuständen) eine bestimmte Zahl, Ton, Zeichen, etc. zuzuordnen. Die Reihenfolge, wie wir dabei alle möglichen Bitmuster aufschreiben ist eigentlich egal, oder? Eine Möglichkeit wäre:

00000000, 10000000, 01000000, 00100000, 00010000, 00001000, 00000100, 00000010, …

Wenn du die Schaltflächen und drückst, wirst du sehen, dass folgende Reihenfolge gewählt wird:

00000000, 00000001, 00000010, 00000011, 00000100, 00000101, 00000110, 00000111, …

Das ist sehr intelligent gewählt, auch wenn es auf den ersten Blick ein wenig seltsam anmutet. Der Grund liegt im Stellenwertsystem von Zahlen. Du bist das Stellenwertsystem des Dezimalsystems gewohnt, das auf den Potenzen von 10 (also 100 = 1, 101 = 10, 102 = 100,…) aufbaut. Zum Beispiel bedeutet die Ziffernkombination im Dezimalsystem:

1·102 + 1·101 + 1·100  = 
1·100 + 1·10 + 1·1  = 

Nach dem­sel­ben Prinzip lässt sich jede Zahl auch im Dualsystem darstellen. Das Dualsystem verwendet die Potenzen von 2:

1·27 + 1·26 + 1·25 + 1·24 + 1·23 + 1·22 + 1·21 + 1·20  = 
1·128 + 1·64 + 1·32 + 1·16 + 1·8 + 1·4 + 1·2 + 1·1  = 
1280 + 640 + 320 + 160 + 80 + 40 + 20 + 10  = 

Mit der gewählten Reihenfolge der Bitmuster erhält man also die Binärdarstellung der natürlichen Zahlen in aufsteigender Reihenfolge.

In der Praxis benötigt man auch negative Zahlen. Die einfachste Möglichkeit positive und negative Zahlen durch ein Bitmuster abzubilden besteht darin, das höchstwertige Bit als Vorzeichen und die restlichen 7 Bit wie bei einer Ganzzahl ohne Vorzeichen zu interpretiert.

Vorz. Zahl
      1 1 1 1 1 1 1 1

0 bedeutet eine positive Zahl, 1 bedeutet eine negative Zahl.

(−1)1 · ( 1·26 + 1·25 + 1·24 + 1·23 + 1·22 + 1·21 + 1·20 ) = 
−1+1 · ( 1·64 + 1·32 + 1·16 + 1·8 + 1·4 + 1·2 + 1·1 ) = 
−1 · ( 640 + 320 + 160 + 80 + 40 + 20 + 10 )    = 

Diese Darstellung von negativen Zahlen erscheint natürlich, hat aber einen praktischen Nachteil: Schon die einfache Addition 10000001 + 00000001 = 10000010 führt zu einem falschen Ergebnis, denn in dezimaler Schreibweise steht hier −1 + 1 = −2.

Die Einerkomplement Darstellung von negativen Zahlen versucht das Additions-Problem der Ganzzahl (mit Vorzeichenbit) zu lösen. Um aus einer positiven Zahl die betragsmäßig gleich große negative Zahl zu erhalten, wird einfach jedes Bit negiert. Hier ein Beispiel:

(01011100)2  =  (92)10
(10100011)2  =  (92)10

Führen wir wieder die Addition aus dem Abschnitt Ganzzahl (mit Vorzeichenbit) durch, erhalten wir jetzt 11111110 + 00000001 = 11111111, also das richtige Ergebnis, denn in dezimaler Schreibweise steht hier −1 + 1 = 0 (eigentlich −0, was mathematisch gleichwertig ist).

Die Zweierkomplement Darstellung von negativen Zahlen versucht das Problem der Einerkomplement Darstellung zu lösen, dass es keine eindeutige Darstellung jeder Zahl gibt. Um aus einer positiven Zahl die betragsmäßig gleich große negative Zahl zu erhalten, wird einfach jedes Bit negiert und zu dem Ergebnis der Wert 1 addiert. Hier ein Beispiel:

(01011100)2  =  (92)10
(10100011)2 invertiert
+(00000001)2 plus eins
(10100100)2  =  (−92)10

Führen wir wieder die Addition aus dem Abschnitt Ganzzahl (mit Vorzeichenbit) durch, erhalten wir jetzt 11111111 + 00000001 = 00000000, (nach einem Überlauf) das richtige Ergebnis, denn in dezimaler Schreibweise steht hier −1 + 1 = 0. Negative Zahlen sind nach wie vor daran zu erkennen, dass das höchstwertige Bit den Wert 1 hat. Bei 0 liegt eine positive Zahl oder der Wert 0 vor. Der Wertebereich von negativen und positiven Ganzzahlen ist jetzt aber nicht mehr gleich groß.

Eine Gleitkommazahl (auch Fließkommazahl) ist eine näherungweise Darstellung einer reellen Zahl. Zum Beispiel hat die Zahl −3,18·10−2 den Aufbau [Vorzeichen] · [Mantisse] · [Basis][Exponent].

Vorz. Exp. Mant.
      1 1 1 1 1 1 1 1
Vorzeichen
Das höchstwertige Bit wird als Vorzeichen interpretiert (wie bei Ganzzahl (mit Vorzeichenbit)).
Mantisse
Die letzten vier Bit bilden die Mantisse. Wie in der Wissenschaftliche Notation fordert man auch hier eine Ziffer ungleich Null vor dem Komma (normierte Mantisse). Da im Dualsystem 1 die einzige Ziffer ungleich Null ist, muss sie nicht mitkodiert werden. Wir schreiben sie bei der Berechnung einfach davor (Berechnung wie bei Festkommazahl)
Basis
Hier wird immer die Basis 2 genommen (braucht ebenfalls nicht kodiert werden).
Exponent
Die drei mittleren Bits bilden den Exponenten. Er wird als natürliche Zahl wie in Ganzzahl ohne Vorzeichen kodiert. Die zwei vollbesetzten Exponenten (000)2 und (111)2 haben dabei immer eine Sonderfunktion (siehe unten). Die verbleibenden möglichen Exponenten sind daher nur 1, 2, 3, 4, 5 und 6. Damit man auch negative Exponenten zur Verfügung hat, wird einfach eine fixe Zahl abgezogen (engl. bias für „Verzerrung“). Wenn wir also die Zahl 3 als bias wählen, ergibt das die möglichen Exponenten −2, −1, 0, 1, 2 und 3.

Jede binäre Gleitkommadarstellung muss auch spezielle Bitfolgen für

besitzen! Die Abkürzung NaN steht für Not a Number („Nichtzahl“). Dieses Symbol benötigt man, um ungültige Zahlen (zum Beispiel das Ergebnis einer Division durch Null) oder durch reelle Zahlen nicht darstellbare Zahlen (zum Beispiel die Quadratwurzel aus einer negativen Zahl) zu notieren.

1 (Bit 7; Vorzeichen) +    
111 (Bit 4-6; Exponent minus bias 3) 000        = 
1,1111 (Bit 0-3; „1,“ plus Mantisse) 0000    

Die so darstellbaren Zahlen sind nicht gleichmäßig auf dem Zahlenstrahl zu finden. Liegen sie im Intervall −1 < x < 1 noch recht dicht, nimmt ihre Dichte außerhalb rasch ab.

 

Gleitkommazahlen werden z.B. in Programmen mit naturwissenschaftlichen Berechnungen verwendet, da sie einen sehr großen Zahlenbereich abdecken.

Der hier vorgestellte Gleitkomma-Typ 8Bit minifloat zeigt dir nur das Prinzip der Darstellung einer Gleitkommazahl. In der Praxis verwendet man 32Bit (1-8-23) bzw. 64Bit (1-11-52) große Gleitkommazahlen. Die verschiedenen Typen von Gleitkommazahlen sind in der Norm IEEE 754 international festgelegt.

Vorsicht: Der hier vorgestellte minifloat Typ 1-3-4 unterscheidet sich geringfügig vom minifloat Typ 1-4-3 in der Wikipedia!

Hier geht es um die Möglichkeit eine nicht-ganze Zahl in einem Byte zu speichern. Die einfachste Methode ist eine Festkommazahl. Der Aufbau ist ähnlich der Ganzzahl (ohne Vorzeichen), allerdings wird – wie der Name schon sagt – eine fixe Anzahl an Bits für die Vorkomma- und Nachkommastellen festgelegt. In unserem Beispiel sind das jeweils 4 Bit.

Vorkommastellen Nachkommastellen
1·23 + 1·22 + 1·21 + 1·20 + 1·2−1 + 1·2−2 + 1·2−3 + 1·2−4  = 
1·8 + 1·4 + 1·2 + 1·1 + 1·0,5 + 1·0,25 + 1·0,125 + 1·0,0625  = 
80 + 40 + 20 + 10 + 0,50 + 0,250 + 0,1250 + 0,06250  = 

Ob eine rationale Zahl eine endlich abbrechende Dezimalbruchentwicklung besitzt hängt vom verwendeten Zahlensystem für die Darstellung ab! Zum Beispiel hat der Bruch 2/5 im Dezimalsystem eine endlich abbrechende Dezimalbruchentwicklung (0,4)10, während derselbe Bruch im Dualsystem eine unendliche Dezimalbruchentwicklung (0,0110011001100110011…)2 besitzt.

Festkommazahlen werden z.B. in Programmen von Banken und Geldinstituten verwendet, da alle Zahlen eine festgelegte Genaugikeit besitzen.

alle druckbare ASCII Zeichen

Jeder Computer muss natürlich nicht nur Zahlen, sondern auch Zeichen verstehen können. Die erste Vereinbarung, welches Bitmuster, welchem Zeichen entspricht, war der 1963 festgelegte American Standard Code for Information Interchange (kurz ASCII) und ist eine 7-Bit-Zeichenkodierung, d.h. er beinhaltet nur 128 Zeichen, wobei die ersten 32 Zeichen (0...31) sogenannte nicht-druckbare Steuerzeichen sind, also Zeichen die beim Ausdruck keine „Tinte“ auf dem Papier hinterlassen. So steht zum Beispiel das ASCII-Zeichen 13 (Carriage Return) für einen Zeilenumbruch und mit dem Zeichen 7 (Bell) konnte man früher einem Computer einen Ton entlocken. Die Ausnahme ist das Leerzeichen - es hinterlässt im Ausdruck ebenfalls keine Tinte ist aber ein Zeichen. Hier geht es zu einer vollständigen Tabelle der ASCII Zeichen.

Im amerikanischen Alphabet kommen aber viele Buchstaben, die in anderen Länder gebräuchlich sind, nicht vor. Zum Beispiel die Umlaute der deutschen Sprache. Zum Glück hatte man noch ein Bit frei, um den Satz von Zeichen auf 256 zu erhöhen. Leider haben unterschiedliche Länder dabei unterschiedliche Bedeutungen den Zeichen 128-255 zugeordnet. Die bei uns in Westeuropa übliche Erweiterung des ASCII Codes ist Latin-1 (ISO 8859-1, oft auch als ANSI bezeichnet). Dabei gab es ein großes Problem: Verwendete ein Computer die falsche Codepage zur Darstellung eines Textes, war er unleserlich.

Das Chaos mit den unterschiedlichen (länderspezifischen) Erweiterungen wurde erst um das Jahr 2000 beseitigt, als Betriebssysteme und Programme begannen, sich bei der Zeichenkodierung an den Unicode Standard zu halten. Unicode ist ein Katalog, in dem versucht wird, alle Zeichen der Welt zu erfassen und eine eindeutige Nummer zu vergeben. Es sind schon über 100.000 Zeichen aus den unterschiedlichsten Kulturen erfasst. Selbstverständlich benötigt man dann mehr als 1 Byte pro Zeichen für die Codierung...

John von Neumann Portrait um 1940

Opcode ist die Abkürzung für operation code. Darunter versteht der Informatiker einen elementaren Befehl (z.B. ADD für die Addition zweier Zahlen) für einen bestimmten Prozessor (hier einen Prozessor mit x86 Architektur).

Der österreichisch-ungarische Mathematiker John von Neumann hat bereits im Jahr 1945 ein Konzept für einen Computer aufgestellt, wie eine Rechenmaschine Daten und Befehle verarbeitet. Dein heutiger PC arbeitet noch nach genau dem­sel­ben Prinzip, bei dem sowohl die Befehle als auch die Daten in einem langen gemeinsamen Strom von 0 und 1 angeordnet sind (von Neumann-Architektur).

Datenstrom mit Befehlen und Daten

Woher weiß der Prozessor ob jetzt ein Befehl oder ein Datum (gemeint ist die Einzahl von Daten nicht ein Kalenderdatum!) kommt? Das erste Byte ist immer ein Befehl. Durch den Opcode weiß der Prozessor wie viele Argumente er jetzt erwarten kann. Ist der Opcode ADD für zwei Ganzahlen ohne Vorzeichen, dann interpretiert er die folgenden zwei Byte als Daten (nähmlich als ersten und zweiten Summanden). Das Bitmuster des danach folgenden Byte wird wieder als Befehl (Opcode) interpretiert, usw.

Quelle: X86 Opcode and Instruction Reference Home

Additive Farbmischung

Zuerst solltest du die Ganzzahl (ohne Vorzeichen) verstanden haben.

Fast alle Displays (CRT, TFT/LCD, OLED,…) für digitale Ausgaben verwenden farbiges Licht zur Darstellung. Für sie alle gilt daher die additive Farbmischung, deren Grundfarben Rot, Grün und Blau sind. Jeder Farbteil wird durch ein Byte beschrieben. Mit diesem RGB-Farbraum lassen sich 256·256·256 = 16.777.216 (fast 17 Millionen Farben) darstellen.

Rot (25)10     
Grün (125)10  #FFFFFF
Blau (225)10

Nach Aussage der Webseite der Universität Mannheim können normalsichtige Menschen etwa 200 Farbtöne unterscheiden. Wenn man nun die Intensität des jeweiligen Farbtons verändert, ergeben sich pro Farbton etwa 500 unterscheidbare Helligkeiten. Durch Variieren des Weißanteils im Farbton erhält man circa 20 weitere Farben pro Farbton. Insgesamt kann der Mensch also ungefähr 2 Millionen Farben unterscheiden (Das entspricht der Farbfestlegung im HSV-Farbraum mit Farbwert, Farbsättigung und Helligkeit). Das ist in etwa die Größenordnung der 3-Byte (3·8 = 24-Bit) Darstellung von Farben (True Color). Bei einigen Anwendungen werden sogar noch größere Farbtiefen verwendet.

Und jetzt noch zu einer sehr häufig gestellten Frage: Warum ist die Hexadezimal-Schreibweise bei Informatikerinnen und Informatikern so beliebt? Am besten gebe ich dir die Antwort mit einem Beispiel: In welcher Darstellung kannst du leichter erkennen, dass es sich bei dem Farbcode um eine helles Grau handelt?

  1. #110100101101001011010010
  2. #D2D2D2
Die Hexadezimal-Schreibweise ist für uns Menschen wesentlich einfacher zu lesen und zu erkennen.

Cycling in Amsterdam

Das normalsichtige menschliche Auge kann - je nach zitierter Quelle - ca. 60-100 Graustufen unterscheiden. 8 Bit ergeben insgesamt 256 Graustufen, somit lässt sich mit einem Byte pro Pixel jedes Schwarzweiß-Foto problemlos kodieren.

Die Deckkraft oder Opazität gibt an, wie undurchsichtig ein Objekt ist. Lichtdurchlässigkeit (oder Transparenz) hängen mit Opazität wie folgt zusammen: Lichtdurchlässigkeit = 100% − Opazität.

Einige Grafikprogramme (zum Beispiel GIMP) legen Farben durch einen angehängten Wert für die Opazität fest. Hier eine Beispielfarbe im Vergleich (links ohne und rechts mit Opazitätswert):

#3BAD15           #3BAD15CE

Für ein solches Bild brauchst du dann 4 Byte Information pro Pixel (3 Byte Farbe + 1 Byte Transparenz oder Alphakanal).

Noten und Notenbezeichnung

Es gibt verschiedene Möglichkeiten Töne binär zu kodieren. Eine der ältesten Standards ist der MIDI (Musical Instrument Digital Interface) Standard. In dieser 7-Bit Kodierung erhält der Ton C3 (ca. 8.18 Hz), der unterhalb der tiefsten vom Menschen hörbaren Frequenz mit etwa 16 Hz bis 21 Hz liegt, die Nummer 0. Die weiteren Frequenzen der gleichstufigen Stimmung erhalten die jeweils fortlaufende Nummer. Ein Klavier besitzt üblicherweise einen Tonumfang von 88 Tasten. In den 128 Tönen des Midi-Standards sind auch Noten oberhalb und unterhalb der Klaviatur enthalten.

01011100

Wenn du sehr tiefe oder sehr hohe Töne mit der Play-Knopf ausprobierst, kann es passieren, dass du gar keinen Ton hörst. Das kann mehrere Ursachen haben: Einerseits kann der Ton außerhalb deiner persönlichen Hörfläche liegen, andererseits kann aber auch die Soundkarte des Computers oder die Kopfhörer/Lautsprecher, die du gerade verwendest, diesen Ton vielleicht nicht wiedergeben. Tipp: Wenn du mit dem Mauszeiger über die Note neben dem Play-Knopf fährst, wird die Frequenz eingeblendet.

Die oben gezeigte Kodierung erfasst nur die Tonhöhe; für die Dauer des Tons muss ein weiteres Byte zur Kodierung verwendet werden.

Neben der Verwendung von hoch- und tiefgestellte Zahlen für die Oktave ist auch die Notation mittels Strichen gebräuchlich. Zum Beispiel:

Mag. Michael Rundel