Praktische Informatik 1


Kapitel 2: Informationsdarstellung



Yüklə 3,49 Mb.
səhifə7/25
tarix08.08.2018
ölçüsü3,49 Mb.
#61957
1   2   3   4   5   6   7   8   9   10   ...   25

Kapitel 2: Informationsdarstellung

2.1 Bits und Bytes, Zahl- und Zeichendarstellungen


(siehe Gumm/Sommer * Kap.1.2/1.3)

Damit Informationen von einer Maschine verarbeitet werden können, müssen sie in der Maschine repräsentiert werden. Üblich sind dabei Repräsentationsformen, die auf Tupeln oder Folgen über der Menge B aufbauen. Ein Bit (binary digit) ist die kleinste Einheit der Informationsdarstellung: es kann genau zwei Werte annehmen, z. B. 0 oder 1. Genau wie es viele verschiedene Notationen der Menge B gibt, gibt es viele verschiedene Realisierungsmöglichkeiten eines Bits: an/aus, geladen/ungeladen, weiss/schwarz, magnetisiert/entmagnetisiert, reflektierend/lichtdurchlässig, …

Lässt eine Frage mehrere Antworten zu, so lassen sich diese durch eine Bitfolge (mehrere Bits) codieren.

Beispiel: Die Frage, aus welcher Himmelsrichtung der Wind weht, lässt 8 mögliche Antworten zu. Diese lassen sich durch Bitfolgen der Länge 3 codieren:

000 = Nord

001 = Nordost

010 = Ost

011 = Südwest

100 = Süd

101 = Südost

110 = West

111 = Nordwest
Offensichtlich verdoppelt jedes zusätzliche Bit die Anzahl der möglichen Bitfolgen, so dass es genau 2n mögliche Bitfolgen der Länge n gibt (|B|=2  |Bn|=2n)
Ein Byte ist ein Oktett von Bits: 8 Bits = 1 Byte. Oft betrachtet man Bytefolgen anstatt von Bitfolgen. Ein Byte kann verwendet werden, um z.B. folgendes zu speichern:


  • ein codiertes Zeichen (falls das Alphabet weniger als 28 Zeichen enthält)

  • eine Zahl zwischen 0 und 255,

  • eine Zahl zwischen -128 und +127,

  • die Farbcodierung eines Punkts in einer Graphik, genannt „Pixel“ (picture element)

Gruppen von 16 Bits, 32 Bits, 64 Bits bzw. 128 Bits werden häufig als Halbwort, Wort, Doppelwort bzw. Quadwort bezeichnet. Leider gibt es dafür unterschiedliche Konventionen.


Zwischen 2-er und 10-er Potenzen besteht (näherungsweise) der Zusammenhang: frame1

Für Größenangaben von Dateien, Disketten, Speicherbausteinen, Festplatten etc. benutzt man daher folgende Präfixe:



  • k = 1024 = 210  103 (k = Kilo)

  • M = 10242 = 1048576=220  106 (M = Mega)

  • G = 10243 = 230  109 (G = Giga)

  • T = 10244 = 240  1012 (T = Tera)

  • P = 10245 = 250  1015 (P = Peta)

  • E = 10246 = 260  1018 (E = Exa)

Die Ungenauigkeit der obigen Näherungsformel nimmt man dabei in Kauf.

Mit 1 GByte können also entweder 230 = 10243 = 1.073.741.824 oder 109 = 1.000.000.000 Bytes gemeint sein.



Anhaltspunkte für gängige Größenordnungen von Dateien und Geräten:

  • eine SMS: ~140 B (160 Zeichen zu je 7 Bit)

  • ein Brief: ~3 kB

  • ein „kleines“ Programm: ~300 kB

  • Diskettenkapazität: 1,44 MB

  • ein „mittleres“ Programm: ~ 1 MB

  • ein Musiktitel: ~40 MB (im MP3-Format ~4 MB)

  • CD-ROM Kapazität: ~ 680 MB

  • Hauptspeichergröße: 1-8 GB

  • DVD (Digital Versatile Disk): ~ 4,7 bzw. ~ 9 GB

  • Festplatte: 250-1000 GB.

Für Längen- und Zeiteinheiten werden auch in der Informatik die gebräuchlichen Vielfachen von 10 benutzt. So ist z.B. ein 400 MHz Prozessor mit 400´106 = 400.000.000 Hertz (Schwingungen pro Sekunde) getaktet.

Das entspricht einer Schwingungsdauer von 2,5´10-9 sec, d.h. 2,5 ns. Der Präfix n steht hierbei für nano, d.h. den Faktor 10-9. Weitere Präfixe für Faktoren kleiner als 1 sind:


  • m = 1/1000 = 10-3 (m = Milli)

  • µ = 1/1000000 = 10-6 (µ = Mikro)

  • n = 1/1000000000 = 10-9 (n = Nano)

  • p = ... = 10-12 (p = Pico)

  • f = ... = 10-15 (f = Femto)


Beispiele: 1mm = 1 Millimeter; 1 ms = 1 Millisekunde.
Für Längenangaben wird neben den metrischen Maßen eine im Amerikanischen immer noch weit verbreitete Einheit verwendet: 1" = 1 in = 1 inch = 1 Zoll = 2,54 cm = 25,4 mm. Teile eines Zolls werden als Bruch angegeben. Beispiel - Diskettengröße: 3 1/2".

Darstellung natürlicher Zahlen, Stellenwertsysteme


Die älteste Form der Darstellung von Zahlen ist die Strichdarstellung, bei der jedes Individuum durch einen Strich oder ein Steinchen repräsentiert wird (calculi=Kalksteinchen, vgl. kalkulieren). Bei dieser Darstellung ist die Addition besonders einfach (Zusammen- oder Hintereinanderschreibung von zwei Strichzahlen), allerdings wird sie für große Zahlen schnell unübersichtlich. Die Ägypter führten deshalb für Gruppen von Strichen Abkürzungen ein (http://de.wikipedia.org/wiki/Ägyptische_Zahlen, http://www.informatik.uni-hamburg.de/WSV/teaching/vorlesungen/WissRep-Unterlagen/WR03Einleitung-1.pdf).

Daraus entstand dann das römische Zahlensystem:




Aus Übersichtlichkeitsgründen werden die großen Zahlen dabei zuerst geschrieben; prinzipiell spielt in solchen direkten Zahlensystemen die Position einer Ziffer keine Rolle. Die Schreibweise IV = 5-1 ist erst viel später entstanden!
Direkte Zahlensysteme haben einige Nachteile: Die Darstellung großer Zahlen kann sehr lang werden, und arithmetische Operationen lassen sich in solchen Systemen nur schlecht durchführen. In Indien (und bei den Majas) wurde ein System mit nur zehn verschiedenen Ziffernsymbolen verwendet, bei der die Position jeder Ziffer (von rechts nach links) ihre Wertigkeit angibt. Die wesentliche Neuerung ist dabei die Erfindung der Zahl Null (ein leerer Kreis). Der schon genannte Muhammed ibn Musa al-Khwarizmi verwendete das Dezimalsystem in seinem Arithmetikbuch, das er im 8. Jahrhundert schrieb. Bereits im 10. Jahrhundert wurde das System in Europa eingeführt, durchsetzen konnte es sich jedoch erst im 12. Jahrhundert mit der Übersetzung des genannten Arithmetikbuchs ins Lateinische (durch Fibonacci, siehe oben).(http://www.land.salzburg.at/hs-kuchl/hsk-math/Araber.htm)

Wir haben schon erwähnt, dass das Dualzahlen- oder Binärsystem mit nur zwei Ziffern in Europa 1673 von Gottfried Wilhelm Leibnitz (wieder-)erfunden wurde. Allgemein gilt: In Stellenwertsystemen wird jede Zahl als Ziffernfolgen xn-1... x0 repräsentiert, wobei - bezogen auf eine gegebene Basis b - jede Ziffer xi einen Stellenwert (xi*bi) bekommt:



Werden dabei nur Ziffern xi mit Werten zwischen 0 und b-1 benutzt, so ergibt sich eine eindeutige Darstellung; dafür werden offenbar genau b Ziffern benötigt. Zu je zwei Basen b und b' gibt es eine umkehrbar eindeutige Abbildung, die [xn-1... x0]b und [ yn'-1... y0]b' mit 0 £ xi £ b und 0 £ yi £ b' ineinander überführt.
Beispiele:

b = 2: [10010011]2 = 1*27 + 1*24 + 1*21 + 1*20 = [147]10

b = 3: [12110]3 = 1*34 + 2*33 + 1*32 + 1*31 = [147]10

b = 8: [223]8 = 2*82 + 2*81 + 3*80 = [147]10

b = 10: [147]10 = 1*102 + 4*101 + 7*100=[10010011]2
Wichtige Spezialfälle sind b=10, 2, 8 und 16. Zahlen mit b=8 bezeichnet man als Oktalzahlen. Unter Sedezimalzahlen (oft auch Hexadezimalzahlen genannt) versteht man Zifferndarstellungen von Zahlen zur Basis 16. Sie dienen dazu, Dualzahlen in komprimierter (und damit leichter überschaubarer) Form darzustellen und lassen sich besonders leicht umrechnen. Je 4 Dualziffern werden zu einer „Hex-ziffer“ zusammengefasst. Da man zur Hexadezimaldarstellung 16 Ziffern benötigt, nimmt man zu den Dezimalziffern 0 ... 9 die ersten Buchstaben A ... F hinzu.

Beispiele: Umwandlung von Dezimal - in Oktal- / Hexadezimalzahlen und umgekehrt:


[1]10=[1]8=[1]16=[1]2

[16]10=[20]8=[10]16

[256]10=[400]8=[100]16



[17]10=[21]8=[11]16

[1000]10=[3E8]16

[7]10=[7]8=[7]16=[111]2





[8]10=[10]8=[8]16=[1000]2

[32]10=[40]8=[20]16

[4096]10=[10000]8=[1000]16

[9]10=[11]8=[9]16=[1001]2

[33]10=[41]8=[21]16



[10]10=[12]8=[A]16=[1010]2



[10000]10=[2710]16

[11]10=[13]8=[B]16=[1011]2

[80]10=[100]8=[50]16



[12]10=[14]8=[C]16=[1100]2



[45054]10=[AFFE]16

[13]10=[15]8=[D]16=[1101]2

[160]10=[240]8=[A0]16

[65535]10=[177777]8=[FFFF]16

[14]10=[16]8=[E]16=[1110]2



[106]10=[F4240]16

[15]10=[17]8=[F]16=[1111]2

[255]10=[377]8=[FF]16

[4294967295]10=[FFFFFFFF]16

Diese Umrechnung ist so gebräuchlich, dass sie von vielen Taschenrechnern bereit gestellt wird.




Um mit beliebig großen natürlichen oder ganzen Zahlen rechnen zu können, werden diese als Folgen über dem Alphabet der Ziffern repräsentiert. Diese Darstellung wird beispielsweise im bc verwendet. Numerische Algorithmen mit solchen Repräsentationen sind allerdings häufig komplex, und in vielen Anwendungen wird diese Allgemeinheit nicht benötigt. Daher werden Zahlen oft als Dual- oder Binärwörter einer festen Länge n repräsentiert. Mit Hilfe von n Bits lassen sich 2n Zahlenwerte darstellen:

  • die natürlichen Zahlen von 0 bis 2n - 1 oder

  • die ganzen Zahlen zwischen -2n-1 und 2n-1 - 1 oder

  • ein Intervall der reellen Zahlen (mit begrenzter Genauigkeit)


Beispiel:

Länge

darstellbare Zahlen

4

0 .. 15

8

0 .. 255

16

0 .. 65535

32

0 .. 4 294 967 295

Darstellung ganzer Zahlen


Für die Darstellung ganzer Zahlen Z wird ein zusätzliches Bit (das "Vorzeichen-Bit") benötigt. Mit Bitfolgen der Länge n kann also (ungefähr) der Bereich [-2n-1 .. 2n-1] dargestellt werden. Nahe liegend ist die dabei Vorzeichendarstellung: Das erste Bit repräsentiert das Vorzeichen (0 für '+' und 1 für '-') und der Rest den Absolutwert.

Nachteile dieser Darstellung:



    • Die Darstellung der 0 ist nicht mehr eindeutig.

    • Beim Rechnen "über die 0" müssen umständliche Fallunterscheidungen gemacht werden, Betrag und Vorzeichen sind zu behandeln.
      Beispiel:3 + (-5) = 0011+1101=1010

Eine geringfügige Verbesserung bringt die Einserkomplement-Darstellung, bei der jedes Bit der Absolutdarstellung umgedreht wird. Meist wird jedoch die so genannte Zweierkomplement-Darstellung (kurz: 2c) benutzt. Sie vereinfacht die arithmetischen Operationen und erlaubt eine eindeutige Darstellung der 0. Bei der Zweierkomplementdarstellung gibt das erste Bit das Vorzeichen an, das 2. bis n-te Bit ist das Komplement der um eins verringerten positiven Zahl. Die definierende Gleichung für die Zweierkomplementdarstellung ist:

[-xn-1... x0]2c + [xn-1...x0]2c = [10...0]2c = 2n+1

Um zu einer gegebenen positiven Zweierkomplement-Zahl die entsprechende negative zu bilden, invertiert man alle Bits und addiert 1. Die Addition kann mit den üblichen Verfahren berechnet werden (Beweis: eigene Übung!).

Beispiele: n = 4: +5 ® [0101]2c , also -5 ® (1010 + 0001)2c = [1011]2c

3 + (-5) =[0011]2c +[1011]2c =[1110]2c

4 + 5 =[0100]2c +[0101]2c ® [1001]2c = -7 (Achtung!!!)

Wichtiger Hinweis: In vielen Programmiersprachen wird ein Zahlbereichsüberlauf nicht abgefangen und kann beispielsweise zur Folge haben, dass die nagelneue Rakete abstürzt!


Darstellung rationaler und reeller Zahlen


Prinzipiell kann man rationale Zahlen Q als Paare ganzer Zahlen (Zähler und Nenner) darstellen. Ein Problem ist hier die Identifikation gleicher Zahlen: (7,-3)=(-14,6). Hier müsste man nach jeder Rechenoperation mit dem ggT normieren; das wäre sehr unpraktisch. Daher werden in der Praxis rationale Zahlen Q meist wie reelle Zahlen R behandelt.

Für reelle Zahlen gilt:



  • Es gibt überabzählbar viele reelle Zahlen R. Also gibt es auch reelle Zahlen, die sich nicht in irgend einer endlichen Form aufschreiben lassen, weder als endlicher oder periodischer Dezimalbruch noch als arithmetischer Ausdruck oder Ergebnis eines Algorithmus. Echte reelle Zahlen lassen sich also nie genau in einem Computer speichern, da es für sie definitionsgemäß keine endliche Darstellung gibt.

  • Die so genannten „reals“ im Computer sind mathematisch gesehen immer Näherungswerte für reelle Zahlen mit endlicher Genauigkeit.

Für reelle Zahlen R gibt es die Festkomma- und die Gleitkommadarstellung. Bei der Festkommadarstellung steht das Komma an einer beliebigen, festen Stelle. Für
x=[xn-1xn-2…x1x0x-1x-2…x-m]2 ist . Diese Darstellung gestattet nur einen kleinen Wertebereich und hat auch sonst einige Nachteile (Normierung von Zahlen erforderlich).

Daher verwendet man sie in elektronischen Rechenmaschinen nur in Ausnahmefällen (z.B. beim Rechnen mit Geld). Ziel der Gleitkommadarstellung (IEEE754 Standard) ist es,



  • ein möglichst großes Intervall reeller Zahlen zu umfassen,

  • die Genauigkeit der Darstellung an die Größenordnung der Zahl anzupassen: bei kleinen Zahlen sehr hoch, bei großen Zahlen niedrig.

Daher speichert man neben dem Vorzeichen und dem reinen Zahlenwert - der so genannten Mantisse - auch einen Exponenten (in der Regel zur Basis 2 oder 10), der die Kommaposition in der Zahl angibt.

  • Das Vorzeichenbit v gibt an, ob die vorliegende Zahl positiv oder negativ ist.

  • Die Mantisse m besteht aus einer n–stelligen Binärzahl m1....mn

  • Der Exponent e ist eine L-stellige ganze Zahl (zum Beispiel im Bereich -128 bis +127), die angibt, mit welcher Potenz einer Basis b die vorliegende Zahl zu multiplizieren ist.

Das Tripel (v, m, e) wird als (-1)v * m * be-n interpretiert. Bei gegebener Wortlänge von 32 Bit verwendet man beispielsweise 24 Bit für Vorzeichen und Mantisse (n=23) sowie L=8 Bit für den Exponenten. Beispiele mit n=L=4: (0, 1001, 0000) = 1 * 9 * 2-4 = [0,1001]2=0,5625 und (1, 1001, 0110) = -1 * 9 * 26-4 = [-100100]2 = -36 und (0, 1001, 1010) = 1 * 9 * 2-6-4 = 0,00878906… Anstatt wie in diesen Beispielen e in Zweierkomplementdarstellung abzuspeichern, verwendet man die sogenannte biased-Notation: E=e+e’, wobei e’=2L-1-1. Damit ist 0E(2L-1) positiv, und (v, m, E) wird als (-1)v * m * bE -(e’+n) interpretiert. Zum Beispiel ist für L=4 der Wert von e’=7, also ein Exponent E=1010 entspricht e=3. Damit ergibt sich (0, 1001, 1010) = 9 * 23-4 = 4,5. Bei 32-Bit Gleitkommazahl mit 8-Bit Exponent gilt: e’=127, bei 64-Bit Gleitkommazahlen ist e’=1023.
In Groovy und Java gibt es die folgenden Datentypen für Gleitpunktzahlen:

  • Datentyp float (32 Bit) mit dem Wertebereich (+/-)1.4*10-45..3.4*1038.(7 relevante Dezimalstellen: 23 Bit Mantisse, 8 Bit Exponent)

  • Datentyp double (64 Bit) mit dem Wertebereich (+/-)4.9*10-324..1.79*10308.(15 relevante Stellen: 52 Bit Mantisse, 11 Bit Exponent)

  • Datentyp BigDecimal mit fast beliebiger Präzision, bestehend aus Mantisse und 32-bit Exponent, Wert: (Mantisse * (10 ** (-Exponent)))
    Beispiel: new BigDecimal(123, 6 ) == 0.000123

Zeichendarstellung


Zeichen über einem gegebenen Alphabet A werden meist als Bitfolgen einer festen Länge nlog(|A|) codiert. Oft wird n so gewählt, dass es ein Vielfaches von 4 oder von 8 ist.

Beispiel: Um Texte in einem Buch darzustellen, benötigt man ein Alphabet von 26 Kleinbuchstaben, ebenso vielen Großbuchstaben, einigen Satzzeichen wie etwa Punkt, Komma und Semikolon und Spezialzeichen wie "+", "&", "%". Daher hat eine normale Schreibmaschinentastatur eine Auswahl von knapp hundert Zeichen, für die 7 Bit ausreichen. Bereits in den 1950-ern wurden die Codes ASCII und EBCDIC hierfür entwickelt. (siehe ASCII-Tabelle in Kap.1.3 Alphabete).
Mit einem Byte lassen sich 256 Zeichen codieren. Viele PCs benutzen den Code-Bereich [128 .. 255] zur Darstellung von sprachspezifischen Zeichen wie z.B. "ä" (Wert 132 in der erweiterten Zeichentabelle), "ö" (Wert 148) "ü" (Wert 129) und einigen Sonderzeichen anderer Sprachen. Leider ist die Auswahl der sprachspezifischen Sonderzeichen eher zufällig und bei weitem nicht ausreichend für die vielfältigen Symbole fremder Schriften. Daher wurden von der „International Standardisation Organisation“ (ISO) verschiedene ASCII-Erweiterungen normiert. In Westeuropa ist dazu die 8-Bit ASCII-Erweiterung „Latin-1“ nützlich, die durch die Norm ISO8859-1 beschrieben wird.
Mit steigender Speicherverfügbarkeit geht man heutzutage von 8-Bit Codes zu 16-Bit oder noch mehr stelligen Codes über. Hier gibt es den Standard UCS bzw. Unicode.

  • [ISO10646]: "Information Technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane", ISO/IEC 10646-1:1993.

  • [UNICODE]: "The Unicode Standard: Version 2.0", The Unicode Consortium, Addison-Wesley Developers Press, 1996. Siehe auch http://www.unicode.org

Die ersten 128 Zeichen dieser Codes sind ASCII-kompatibel, die ersten 256 Zeichen sind kompatibel zu dem oben genannten Code ISO-Latin-1. Darüber hinaus codieren sie alle gängigen Zeichen dieser Welt.
Herkömmliche Programmiersprachen lassen meist keine Zeichen aus ASCII-Erweiterungen zu. Java und Groovy erlauben die Verwendung beliebiger Unicode-Zeichen in Strings. (Allerdings heißt dies noch lange nicht, dass jede Java-Implementierung einen Editor zur Eingabe von Unicode mitliefern würde!)
Zeichenketten (strings) werden üblicherweise durch Aneinanderfügen einzelner codierter Zeichen repräsentiert; da die Länge oftmals statisch nicht festliegt, werden sie intern mit einem speziellen Endzeichen abgeschlossen..

Beispiel:

Dem Text "Hallo Welt" entspricht die Zeichenfolge

"H", "a", "l", "l", "o", " ", "W", "e", "l", "t"

Diese wird in ASCII folgendermaßen codiert:

072 097 108 108 111 032 087 101 108 116.

In Hexadezimal-Schreibweise lautet diese Folge:

48 61 6C 6C 6F 20 57 65 6C 74.

Dem entspricht die Bitfolge:

01001000 01100001 01101100 01101100 01101111


00100000 01010111 01100101 01101100 01110100.

Obwohl diese Repräsentation sicher nicht die speichereffizienteste ist, ist sie weit verbreitet; bei Speichermangel greift man eher auf eine nachträgliche Komprimierung als auf andere Codes zurück.




Zeit- und Raumangaben


Oft muss man Datumsangaben wie „4. Mai 2010, 9 Uhr 15 pünktlich“ oder Raumangaben, etwa „0310, Rudower Chaussee 26, 12489 Berlin-Adlershof“ in Programmen repräsentieren. Für Termine könnte man das Tripel (4, 5, 2010) durch drei natürliche Zahlen oder mit Uhrzeit als (4, 5, 2010, 9, 15, 0) in sechs Zahlen (Speicherwörtern) ablegen. Um Platz zu sparen, kann man auch eine Folge von 14, 8 oder 6 Zeichen verwenden: "20100504091500", "20100504", "100504". Im letzten Fall bekommt man allerdings ein Y2K-Problem, was sich aber auch im Januar 2010 im Kreditkartenwesen wiederholte.

Um den aktuellen Tag in nur einer ganzen Zahl zu codieren, könnte man eine Stellenwertrechnung wie bei den Gleitkommazahlen verwenden. Dies ist jedoch zu aufwändig; besser ist es, die Zeiteinheiten ab einem bestimmten Anfangszeitpunkt zu zählen. Die Römer zählten ab der vermuteten Gründung der Stadt; in der christlichen Zeit zählt man ab der vermuteten Geburt Jesu. In der Unixzeit zählt man die Sekunden ab dem 1.1.1970, wobei Schaltsekunden nicht mitgezählt werden. Dies kann ggf. zu einem „Jahr-2038-Problem“ führen. Die Umrechnung von Unixzeit in christliche Zeit erfolgt mit dem Kommando date. Da die inkrementelle Zeitrechnung eine immer größer werdende Differenz zur durch die Erdrotation gegebene „natürliche“ Zeit aufweist, fanden öfters Anpassungen und Korrekturen statt, die einschneidendste durch die Einführung des Gregorianischen Kalenders am 4.10./14.10.1582. Seither erfolgt diese Korrektur durch die Einführung von Schalttagen und Schaltsekunden. Ein Schaltjahr ist definiert dadurch, dass die Jahreszahl durch 4 teilbar ist, aber nicht durch 100, oder durch 400.


boolean schaltjahr (x) {(x % 4 == 0) & (x % 100 != 0) | (x % 400 == 0)}

assert schaltjahr (2012) & schaltjahr (2000) & ! schaltjahr(1900)
Um zu einem gegebenen Datum im Gregorianischen Kalender den Wochentag zu ermitteln, kann man die Zellersche Formel (siehe http://de.wikipedia.org/wiki/Zellers_Kongruenz) verwenden.
Um die Zeitrepräsentation auf der ganzen Erde einheitlich referenzieren zu können, wurde 1968 die koordinierte Weltzeit UTC eingeführt. Die lokale Zeit ergibt sich durch Angabe des Offsets zur UTC, etwa 11:30 UTC+1:00 für die mitteleuropäische Ortszeit (MEZ oder CET), die der UTC eine Stunde voraus ist. Die mitteleuropäische Sommerzeit (CEST) ist UTC+2:00. Als Alternative zur koordinierten Weltzeit wurde 1998 die Internetzeit eingeführt (und von der Firma Swatch propagiert), bei der ein Tag aus 1000 Zeiteinheiten besteht und die überall gleich gezählt wird.
In Groovy und in der Java-Bibliothek gibt es die Klassen Date und GregorianCalendar, mit der man direkt mit Datumsangaben rechnen kann:
def t = new Date ()

println t // heutiges Datum

println t+7 // eine Woche später

println t.time // Unixzeit

def c=new GregorianCalendar()

println c.time // heutiges Datum

println c.timeInMillis // etwas später...
Zur Repräsentation von Ortsinformationen auf der Erde gibt es sehr viele unterschiedliche Postanschriftssysteme. Für Koordinatenzuweisungen beim Geo-tagging hat sich das System (Längengrad, Breitengrad) durchgesetzt.


Darstellung sonstiger Informationen


Natürlich lassen sich in einem Computer nicht nur Bits, Zahlen und Zeichen repräsentieren, sondern z.B. auch visuelle und akustische Informationen. Für Bilder gibt es dabei prinzipiell zwei verschiedene Verfahren, nämlich als Vektor- und als Pixelgrafik. Auch für Töne gibt es verschiedene Repräsentationsformen: als Folge von Noten (Midi), Schwingungsamplituden (wav, au) oder komprimiert (mp3). Diese Repräsentationsformen lassen sich jedoch auffassen als strukturierte Zusammensetzungen einfacher Datentypen; wir werden später noch detailliert auf verschiedene Strukturierungsmöglichkeiten für Daten eingehen.

Wichtig: Der Bitfolge sieht man nicht an, ob sie die Repräsentation einer Zeichenreihe, einer Folge von ganzen Zahlen oder reellen Zahlen in einer bestimmten Genauigkeit ist. Ohne Decodierungsregel ist eine codierte Nachricht wertlos!


Yüklə 3,49 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   10   ...   25




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə