Bits und Bytes

Now nobody wants to be a zero. [ … ]
On the other hand, almost everybody wants to be a number one. [ … ]
Now, in my opinion, the problem with these two numbers is that they are just to close.
It leaves very little room in there for everybody else.
– Laurie Anderson: Zero and One (Home of the Brave, 1985)

Ein bisschen Information

Wir leben im „Informationszeitalter“, surfen auf der „Datenautobahn“, alles mittels elektronischer Geräte, deren kleinste Bauelemente wie Schalter nur zwei Zustände kennen: „Aus“ oder „An“. Wie ist das möglich? Zunächst müssen ein paar Begriffen geklärt werden. Informationen und Daten sind nicht dasselbe.

Information ist Wissen, welches ein Absender einem Empfänger über einen Informationskanal übermittelt. Beim Empfänger führt die Information bestenfalls zu einem Zuwachs an Wissen.1 Eine Information kann überraschen, neu und leider auch falsch sein; sie kann auch unser Handeln beeinflussen.

Um zum Empfänger zu gelangen, muss die Information in Daten umgewandelt, kodiert werden. Die Daten können über den Informationskanal als Signal übertragen werden. Der Empfänger interpretiert die übermittelten Daten. Das gelingt nur, indem Absender und Empfänger ein System vereinbart haben, welche Bedeutung einem Signal zukommen soll.

Die kleinstmögliche Menge an Information ist eine Antwort auf eine Entscheidungsfrage. Diese kann nur verneint oder bejaht werden. Wir nennen diese Informationsmenge ein Bit. Sie kann durch einen einzigen Schalter dargestellt werden. Willkürlich ordnen wir den Zustand „Aus“ der Antwort „Nein“ und den Zustand „An“ der Antwort „Ja“ zu. Auch „stromlos“ und „stromführend“ beziehungsweise „niedrige Spannung“ und „hohe Spannung“ wären mögliche Zustände. Wir vereinbaren, wiederum willkürlich, die Ziffer 0 stehe für „Aus“, „Nein“ oder „Falsch“, die Ziffer 1 für „An“, „Ja“ oder „Wahr“.

Im Computer werden mehrere Bits zu einer Einheit zusammengefasst. Acht Bit ergeben ein Byte oder Oktett, zwei Byte ein Wort. Zwei Doppelworte (ein Quadword) haben also zusammen Bit. 64 Bit sind heute eine übliche Verarbeitungsbreite von Prozessoren, also die Anzahl von Bits, die in einem Schritt zugleich verarbeitet werden können.

Ein Byte mit acht Bit kann die Antworten auf maximal acht Fragen enthalten. Sind alle acht Fragen voneinander unabhängig, gibt es mögliche Kombinationen von Antworten. Diese „magische“ Zahl 256 begegnet uns an vielen Stellen in der Informatik.

Zählen im Zweiersystem

Die Bezeichnung Bit kommt von „binary digit“ (Binärziffer). Zugleich heißt digitus auf Lateinisch Finger. Das Zählen haben wir mit den Fingern gelernt. Wir sind es gewohnt, Zahlen im Zehnersystem zu schreiben und zu sprechen, weil die meisten von uns zehn Finger haben. Wie weit können wir mit zehn Fingern zählen? Wie weit können wir mit beiden Händen zählen, wenn wir die Daumen nicht zu Hilfe nehmen, wie weit mit nur vier Fingern einer Hand?

Beginnen wir mit ein paar Fingerübungen. Wir halten beide Hände vor uns, so dass wir die Handrücken sehen. Jedem Finger der rechten Hand ordnen wir einen Zahlenwert zu. Der ausgestreckte kleine Finger steht für eine Eins, der Ringfinger für zwei, der Mittelfinger für vier und der Zeigefinger für acht. Der Zeigefinger der linken Hand bekommt den Zahlenwert 16 und so fort bis zum linken kleinen Finger mit dem Wert 128. Lege die Finger so wie in der Tabelle unten. Dabei steht 0 für einen eingerollten, 1 für einen gestreckten Finger. Eingerollte Finger zählen nichts. Wir addieren die Zahlenwerte der gestreckten Finger: .

00101010
1286432168421

So erhalten wir auch die Antworten auf die anderen Fragen. Die größte Zahl mit vier Fingern ist , mit acht Fingern , mit allen zehn Fingern . Vierhändig kommen wir bis , mit 4 Byte bis . Das sind reichlich vier Milliarden.

Im Quelltext stellen wir den durch Nullen und Einsen dargestellten Bits 0b voran, um sie als Zahlen im Binärsystem zu kennzeichnen. Hochkommas nach jeder Tetrade aus vier Bits helfen beim Zählen der Bits:

//> basics/bits.cpp
import std;
 
int main()
{
	std::println("{}", 0b0010'1010);
	std::println("{}", 0b0000'1111);
	std::println("{}", 0b1111'1111);
	std::println("{}", 0b1111'1111'1111'1111);
	std::println("{}", 0b1111'1111'1111'1111'1111'1111'1111'1111);
}

Hexen mit Zahlen

Mit dem Zweiersystem eng verknüpft ist das Zahlensystem mit der Basis 16, das Hexadezimalsystem. Die Ziffern mit den Werten 10 bis 15 werden durch große oder kleine Buchstaben A bis F dargestellt. Zwei Hexadezimalziffern bilden ein Oktett (Byte). FF entspricht 255. Im Quelltext werden solche Zahlen durch vorangestelltes 0x markiert:

//> basics/hexen.cpp
import std;
 
int main()
{
	std::println("{}", 0x2A);
	std::println("{}", 0x0F);
	std::println("{}", 0xFF);
	std::println("{}", 0xFFFF);
	std::println("{}", 0xFFFF'FFFF);
	std::println("{}", 0xFFFF'FFFF'FFFF'FFFF);
}

Die höchste mit 16 Hexziffern, also mit Bit darstellbare Zahl in der untersten Zeile ist .

Aufgaben

  1. Bilde eine Tabelle der Bitfolgen für die Dezimalzahlen 0 bis 15 / Hexziffern 0 bis F.
  2. Finde das Zahlwort für im Deutschen, im britischen und im amerikanischen Englisch.

Anmerkungen

  1. https://de.wikipedia.org/wiki/Information