1 Datendarstellung

Werbung
1. Darstellung von Daten im Rechner
Hauptspeicherinhalt
Programmcode
Daten
numerisch
Ganze Zahlen
logisch
alphanumerisch
Zeichen
Gleitkommazahlen
vorzeichenlos
mit Vorzeichen
einfache Genauigkeit
Vektorgrafik
Ton
Grafik
Zeichenketten
Bitmapgrafik
Digit. Video
höhere Genauigkeit
Abb. 1.1: Einteilung der Daten
Kennzeichen eines Basis-N-Zahlensystems:
• Zahlenbasis
• Alphabet (Ziffernvorrat)
Basis Alphabet
Dualsystem
2
0, 1
Oktalsystem
8
0, 1, 2, 3, 4, 5, 6, 7
Dezimalsystem
10
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Hexadezimalsystem
16
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Beispiel: Darstellung der Zahl 574 in verschiedenen Zahlensystemen
Dezimal:
Binär:
Oktal:
Hexadezimal:
2
1
0
574 = 5*10 + 7*10 + 4*10
9
5
4
3
2
1
10001111102 = 1*2 + 1*2 + 1*2 + 1*2 + 1*2 + 1*2
3
1
0
10768 = 1*8 + 7*8 + 6*8
2
1
0
23E16 = 2*16 + 3*16 + 14*16
Vergleich der vier wichtigsten Zahlensysteme:
Binärsystem
+ Zahlen sind direktes Abbild des Speicherinhaltes
- lange Zahlen schlecht aufzuschreiben (fehlerträchtig)
Dezimalsystem
+ für den Menschen leicht verständlich
- Umwandlung in‘s Binärsystem „mühsam“
Oktalsystem
+ leicht in‘s Binärsystem konvertierbar
- Zifferngrenzen nicht auf Byte-Grenzen
Hexadezimalsystem
+ leicht in‘s Binärsystem konvertierbar
+ kurze Zahlen
+ Ziffern auf Bytegrenzen
- Anzeige für Buchstaben erforderlich
© Klaus Rittmeier 2014
1. Darstellung von Daten im Rechner
Die Werte lauten allgemein:
S
-1
-2
-23
(E7...E0) - 127
S
-1
-2
-52
(E10...E0) - 1023
Short:
Wert = (-1) * (1 + M1 * 2 + M2 * 2 + ... + M23 * 2 ) * 2
Long:
Wert = (-1) * (1 + M1 * 2 + M2 * 2 + ... + M52 * 2 ) * 2
Temporary:
Wert = (-1) * (M0 + M1 * 2 + M2 * 2 + ... + M63 * 2 ) * 2
S
-1
-2
-63
(E14...E0) - 16383
Beispiel:
1
70,454 = 7,0454 * 10 lautet im Short-Real-Format:
428CE9FC = 0|100 0010 1|000 1100 1110 1001 1111 1100
-4
-5
-8
-9
-10
-12
-15
-16
-17
-18
-19
-20
-21
Mantisse: 2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2
= 0,1008906
noch implizit 1 hinzuaddieren = 1,1008906
Exponent: 133 - 127 = 6
Vorzeichen: 0 (positive Zahl)
6
Die Zahl lautet also +1,008906 * 2 = +1,1008906 * 64 = 70,454
Abb. 1.2: IEEE-Formate für Short Real, Long Real und Temporary Real
© Klaus Rittmeier 2014
1. Darstellung von Daten im Rechner
Dez:
Hex:
Okt:
Bin:
A
S
C
I
I
65
41
101
1000001
83
53
123
01010011
67
43
103
01000011
73
49
111
01001001
73
49
111
01001001
Abb. 1.3: Codierung einer Zeichenkette
Abb. 1.4: ASCII-Zeichentabelle
Wichtige Steuerzeichen:
NULL
BELL
HT/SK
LF
V/TAB
FF
CR
ESC
null character
Audible Signal
Horizontal Tabulation / Skip
Line Feed
Vertical Tabulation
Form Feed
Carriage Return
Escape
© Klaus Rittmeier 2014
1. Darstellung von Daten im Rechner
00
10
20
30
40
50
60
70
80
90
a0
b0
c0
d0
e0
f0
0 1 2 3 4 5 6 7 8 9 a b c d e f
╔═════════════════════════════════════════════════╗
║
☺ ☻ ♥ ♦ ♣ ♠ bel bs ht nl ♂ ♀ cr ♫ ☼ ║
║ ► ◄ ↕ ‼ ¶ § ▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼ ║
║
! " # $ % & ' ( ) * + , - . / ║
║ 0 1 2 3 4 5 6 7 8 9 : ; < = > ? ║
║ @ A B C D E F G H I J K L M N O ║
║ P Q R S T U V W X Y Z [ \ ] ^ _ ║
║ ` a b c d e f g h i j k l m n o ║
║ p q r s t u v w x y z { | } ~ ⌂ ║
║ Ç ü é â ä à å ç ê ë è ï î ì Ä Å ║
║ É æ Æ ô ö ò û ù ÿ Ö Ü ø £ Ø × ƒ ║
║ á í ó ú ñ Ñ ª º ¿ ® ¬ ½ ¼ ¡ « » ║
║ ░ ▒ ▓ │ ┤ Á Â À © ╣ ║ ╗ ╝ ¢ ¥ ┐ ║
║ └ ┴ ┬ ├ ─ ┼ ã Ã ╚ ╔ ╩ ╦ ╠ ═ ╬ ¤ ║
║ ð Ð Ê Ë È ı Í Î Ï ┘ ┌ █ ▄ ¦ Ì ▀ ║
║ Ó ß Ô Ò õ Õ µ þ Þ Ú Û Ù ý Ý ¯ ´ ║
║ - ± ‗ ¾ ¶ § ÷ ¸ ° ¨ · ¹ ³ ² ■
║
╚═════════════════════════════════════════════════╝
Abb. 1.5: Der erweiterte ASCII-Zeichensatz (Codepage 437)
UNICODE
UTF-8 (Abk. für 8-bit Unicode Transformation Format (bzw. UCS Transformation Format) ist die am
weitesten verbreitete Kodierung für Unicode-Zeichen.
UTF-8 ist von der IETF (Internet Engineering Task Force), dem Unicode Consortium und der ISO
(International Organisation for Standardisation) gegenwärtig identisch definiert in den
Normdokumenten:
•
RFC 3629 / STD 63 (2003)
•
The Unicode Standard, Version 4.0, §3.9–§3.10 (2003)
•
ISO/IEC 10646-1:2000 Annex D (2000)
Dabei wird jedem Unicode-Zeichen eine speziell kodierte Bytekette von variabler Länge zugeordnet.
UTF-8 unterstützt bis zu vier Byte, auf die sich wie bei allen UTF-Formaten alle Unicode-Zeichen
abbilden lassen.
UnicodeBereich
(hexadezimal)
UTF-8-Kodierung (binär)
0000 0000 –
0000 007F
0xxxxxxx
0000 0080 –
0000 07FF
110xxxxx 10xxxxxx
Bemerkungen
Möglichkeiten
(theoretisch)
In diesem Bereich (128
Zeichen) entspricht
UTF-8 genau dem
ASCII-Code: Das
7
2
128
höchste Bit ist 0, die
restliche 7-BitKombination ist das
ASCII-Zeichen.
11
7
Das erste Byte enthält 2 − 2 1920
11
(2 )
(2048)
binär 11xxxxxx, die
© Klaus Rittmeier 2014
1. Darstellung von Daten im Rechner
0000 0800 –
0000 FFFF
folgenden Bytes
10xxxxxx; die x stehen
für die fortlaufende
Bitkombination des
Unicode-Zeichens. Die
Anzahl der Einsen vor
0001 0000 –
der höchsten 0 im
0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxx ersten Byte ist die
[0001 0000 – x
Anzahl der Bytes für
001F FFFF]
das Zeichen. (In
Klammern jeweils die
theoretisch maximal
möglichen.)
1110xxxx 10xxxxxx 10xxxxxx
16
11
2 −2
16
(2 )
20
2
21
(2 )
63.488
(65.536)
1.048.576
(2.097.152)
Das erste Byte eines UTF-8-kodierten Zeichens nennt man dabei Start-Byte, weitere Bytes nennt man
Folgebytes. Startbytes enthalten also die Bitfolge 11xxxxxx oder 0xxxxxxx, Folgebytes immer die
Bitfolge 10xxxxxx.
•
Ist das höchste Bit des ersten Bytes 0, handelt es sich um ein gewöhnliches ASCII-Zeichen,
da ASCII eine 7-Bit-Kodierung ist und die ersten 128 Unicode-Zeichen den ASCII-Zeichen
entsprechen. Damit sind alle ASCII-Dokumente automatisch aufwärtskompatibel zu UTF-8.
•
Ist das höchste Bit des ersten Bytes 1, handelt es sich um ein Mehrbytezeichen, also ein
Unicode-Zeichen mit einer Zeichennummer größer als 127.
•
Sind die höchsten beiden Bits des ersten Bytes 11, handelt es sich um das Start-Byte eines
Mehrbytezeichens, sind sie 10, um ein Folge-Byte.
•
Die lexikalische Ordnung nach Byte-Werten entspricht der lexikalischen Ordnung nach
Buchstaben-Nummern, da höhere Zeichennummern mit entsprechend mehr 1-Bits im StartByte kodiert werden.
•
Bei den Start-Bytes von Mehrbyte-Zeichen gibt die Anzahl der höchsten 1-Bits die gesamte
Bytezahl des als Mehrbyte-Zeichen kodierten Unicode-Zeichens an. Anders interpretiert, die
Anzahl der 1-Bits links des höchsten 0-Bits entspricht der Anzahl an Folgebytes plus eins, z. B.
1110xxxx 10xxxxxx 10xxxxxx = drei Bits vor dem höchsten 0-Bit = drei Bytes insgesamt, zwei
Bits nach dem höchsten 1-Bit vor dem höchsten 0-Bit = zwei Folgebytes.
•
Start-Bytes (0xxx xxxx oder 11xx xxxx) und Folge-Bytes (10xx xxxx) lassen sich eindeutig
voneinander unterscheiden. Somit kann ein Byte-Strom auch in der Mitte gelesen werden,
ohne dass es Probleme mit der Dekodierung gibt, was insbesondere bei der
Wiederherstellung defekter Daten wichtig ist. 10xxxxxx Bytes werden einfach übersprungen,
bis ein 0xxxxxxx oder 11xxxxxx Byte gefunden wird. Könnten Start-Bytes und Folge-Bytes
nicht eindeutig voneinander unterschieden werden, wäre das Lesen eines UTF-8Datenstroms, dessen Beginn unbekannt ist, unter Umständen nicht möglich.
Beispiele für UTF-8-Codierungen:
Zeichen
Unicode
Unicode binär
UTF-8 binär
Buchstabe y
0079
Buchstabe ä
Zeichen für eingetragene
Marke ®
00E4
00000000 01111001 01111001
00000000 11100100 11000011 10100100
00AE
00000000 10101110 11000010 10101110
20AC
00100000 10101100
Eurozeichen €
11100010 10000010
10101100
UTF-8
hexadezimal
0x79
0xC3 0xA4
0xC2 0xAE
0xE2 0x82 0xAC
© Klaus Rittmeier 2014
1. Darstellung von Daten im Rechner
C/C++
Summe += 5
Compiler
MOV AX, Summe
Assemblersprache
ADD
AX, 05h
MOV Summe, AX
Maschinensprache
1010000
0000000
1.Befehl
0100000
0000010
0000010
2. Befehl
0000000
1010001
0000000
0100000
3. Befehl
Abb. 1.6: Verhältnis von Hochsprache zur Maschinensprache
© Klaus Rittmeier 2014
Herunterladen