NB02_Zahlendarstellung¶
(c) 2025 Technische Hochschule Augsburg - Fakultät für Informatik - Prof.Dr.Nik Klever - Impressum
Bits und Bytes¶
Bit¶
Computer sind prinzipiell dumm und kennen eigentlich nur zwei Zustände: 0 für Strom aus oder Kondensator nicht geladen und 1 für Strom ein oder Kondensator geladen. Ein Zustand entspricht dabei einem Bit als kleinste Informationseinheit. Ein Bit kann daher entweder 0 oder 1 als Wert enthalten. Wenn man nur zwei Ziffern in einem Zahlensystem zur Verfügung hat, spricht man von einem binären Zahlensystem. Aus diesem Grund werden alle Daten im Computer in das binäre Zahlensystem umgewandelt.
# Graphische Aufbereitung der ersten Zahlen des binären Zahlensystems
Byte¶
Das binäre Zahlensystem ist jedoch in der Darstellung viel zu umfangreich und es lohnt sich jeweils 3 Bits zu einer Ziffer des oktalen Zahlensystems (in dem insgesamt 8 Ziffern von 0 bis 7 zur Verfügung stehen) oder 4 Bits zu einer Ziffer des hexadezimalen Zahlensystems (in dem insgesamt 16 Ziffern von 0 bis 9 sowie von a bis f zur Verfügung stehen). 2 dieser hexadezimalen Ziffern, d.h. also 8 Bit werden nun in allen heute gebräuchlichen Rechnersystemen zu einem Byte zusammengefasst, einer der Grundeinheiten der Darstellung von Zahlen und Zeichen in Computersystemen.
# Graphische Aufbereitung der ersten 256 Zahlen in Bytestruktur
Integer Darstellung¶
In Python gibt es zur Darstellung von Integer (also ganzen Zahlen) in den jeweiligen Zahlensystemen die Präfixe
- 0b für das binäre Zahlensystem
- 0o für das oktale Zahlensystem
- 0x für das hexadezimal Zahlensystem
sowie die Umwandlungsfunktionen
- bin() in das binäre Zahlensystem
- oct() in das oktale Zahlensystem
- hex() in das hexadezimale Zahlensystem
d = 45
b = bin(d)
b = 0b101101
o = oct(d)
o = 0o55
h = hex(d)
h = 0x2d
%%Mooc StringAssessment
Binäre Darstellung einer Integer Zahl
In der folgenden Zuweisung wird die Variable a vorbesetzt:
a = 245
Wie lautet dann die Binäre Darstellung ?
Bitmasken¶
Komprimierte Informationen in einem Byte¶
Ein Byte, d.h. acht Bit, entspricht einer Zahl zwischen 0 und 2**8-1 (255).
Ein Byte kann an seinen acht Bit-Positionen unterschiedliche Informationen tragen, z.B. ob der Strom zu einer Lichtquelle angeschaltet (1) oder ausgeschaltet (0) ist oder ob eine an dem Rechner angeschlossene Videokamera angeschaltet (1) oder ausgeschaltet (0) ist oder ob an entsprechenden Sensoren Strom anliegt (1) oder nicht (0).
Wenn jede Information in einer eigenen Variablen abgespeichert wird, muss hierfür auch entsprechend Memory-Speicherplatz bereit gestellt werden. Dies kann gerade bei Informationen, die nur aus 1 oder 0, bzw. an oder aus bestehen in eine einzige Variable zusammengefasst werden. Dazu muss die entsprechende Information immer an die gleiche Bit-Position des Byte geschrieben werden, dann kann diese Information über eine zweite Variable, die Maske aus der ersten Variablen mit dem Und-Operator herausgefiltert werden.
Beispiel¶
Wenn also immer an der 2. Stelle eines Byte der Status der Lichtquelle steht und an der 3. Stelle der Status der Videokamera:
In dem folgenden Byte (als dezimale Zahl 76)
info = 0b01001100
ist also an der 2. Stelle eine 1 und an der 3. Stelle eine 0.
Die Information über diese beiden interessierenden Stellen bekommt man nun über eine entsprechende Maske heraus, die über die entsprechende Variable gelegt wird, bzw. - mathematisch formuliert - über eine Maske die mit der entsprechenden Variablen über den Und-Operator verknüpft wird. Dann wird an allen Stellen eine 0 angezeigt ausser an den entsprechend interessierenden Stellen, hier jetzt der 2. und 3. Stelle.
Diese Maske lautet
maske = 0b01100000
d.h. es ist an allen Stellen eine 0 ausser an der 2. und 3. Stelle, wo eine 1 anliegt.
Wenn jetzt diese Maske mit der Variablen info über einen Und-Operator verknüpft wird, dann erhält man die beiden gesuchten Werte an der 2. und 3. Stelle aus dieser Variablen:
ergebnis = info & maske
Dies ergibt hier jetzt als Ergebnis 64
ergebnis
64
bzw. binär
bin(ergebnis)
'0b1000000'
da führende Nullen normalerweise bei der Ausgabe weggelassen werden, hier im folgenden Code erweitert auf 8 bits in der Ausgabe ergibt
print("'0b{:08b}'".format(ergebnis))
'0b01000000'
Also ist in unserem Beispiel die Lichtquelle angeschaltet und die Videokamera ausgeschaltet.
%%Mooc Video
Float Darstellung¶
Fast alle Computer benutzen heutzutage die IEEE-754 - Floating Point Arithmetic. Darin wird festgelegt wie eine reelle Zahl als Näherung in einer Floating Point Number (Gleitkommazahl) in einem entsprechenden Bitmuster abgespeichert wird.
Die Gleitkommazahl r wird dabei mit der folgenden Formel
r = v * m * 2**e
dargestellt.
- v ist das Vorzeichen (1 Bit)
- m ist die Mantisse (23 Bits bei single, 52 Bits bei double) bezeichnet die Ziffernstellen der Gleitkommazahl
- e ist der Exponent (8 Bits bei single, 16 Bits bei double) zur Basis 2
In Python wird keine Unterscheidung zwischen single und double durchgeführt, sondern nur mit double im Sinne des Standards IEEE754 gerechnet.
Das Minimum und das Maximum erhält man über den folgenden Code:
import sys
print(sys.float_info.min)
print(sys.float_info.max)
2.2250738585072014e-308 1.7976931348623157e+308
Weitere Literatur¶
%%Mooc WebReference
Wikipedia: IEEE 754
https://de.wikipedia.org/wiki/IEEE_754#.C3.9Cberblick
Hinweis: Beschreibung des IEEE Standards 754, der die Darstellungen für Gleitkommazahlen in Computern beschreibt
%%Mooc WebReference
Python Tutorial: Numbers
https://docs.python.org/3/tutorial/introduction.html#numbers
Hinweis: Grundlegende Eigenschaften von Zahlen in Python
%%Mooc WebReference
Python Library: Standard Types: Numeric Types - int, float, complex
https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex
Hinweis: Genaue Beschreibung der Eigenschaften von Zahlen in Python