(c) 2020/2021 Hochschule Augsburg - Fakultät für Informatik - Prof.Dr.Nik Klever
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
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
In Python gibt es zur Darstellung von Integer (also ganzen Zahlen) in den jeweiligen Zahlensystemen die Präfixe
sowie die Umwandlungsfunktionen
d = 45
b = bin(d)
b = 0b101101
o = oct(d)
o = 0o55
h = hex(d)
h = 0x2d
%%Mooc StringAssessment
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.
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
bzw. binär
bin(ergebnis)
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))
Also ist in unserem Beispiel die Lichtquelle angeschaltet und die Videokamera ausgeschaltet.
%%Mooc Video
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.
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)
%%Mooc WebReference
%%Mooc WebReference
%%Mooc WebReference