• Keine Ergebnisse gefunden

Programmiertechnik Skalare Typen,Variablen, Zuweisungen

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmiertechnik Skalare Typen,Variablen, Zuweisungen"

Copied!
27
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Programmiertechnik

Skalare Typen,Variablen, Zuweisungen

Prof. Dr. Oliver Haase

int i;

long j;

boolean isEmpty;

double average;

char naechstesZeichen;

j = 42L;

i = (int) j;

isEmpty = true;

average = 37.266;

naechstesZeichen = 'h';

(2)

Zahlensysteme

Abzählen

 II, IIII, IIIIII, IIIIIIIIIIII

 auf Anhieb kann ein Mensch höchstens die Zahl 4 sicher erkennen

 zeit- und platzaufwendig für große Zahlen Strichlisten

 II, IIII, IIII I, IIII IIII II

 leichter zu erkennen

 zeit- und platzaufwendig für große Zahlen

Problem: Wie stellt man (große) Zahlen einfach, platzsparend und rechnergeeignet dar?

(3)

Römische Zahlen

Römische Zahlen

 Symbole für

 1: I 5: V

 10: X 50: L

 100: C 500: D

 1000: M

 Wertigkeit ergibt sich durch Reihenfolge der Symbole

 kleine Zahl links von großer Zahl  minus

 kleine Zahl rechts von großer Zahl  plus

 höchstens 3 gleiche Symbole nebeneinander

(4)

Römische Zahlen

Römische Zahlen

Beispiele:

 VI

 IIX

 MCMLXXXVIII

 relativ kompakte Darstellung

 kompliziert!

(5)

Dezimalsystem

Dezimalsystem

 das Dezimalsystem ist ein Stellenwertsystem  Wert einer Ziffer hängt davon ab, an welcher Stelle sie in der Zahl steht

 5582 = 5 · 1000 + 5 · 100 + 8 · 10 + 2 · 1 = 5 · 103 + 5 · 102 + 8 · 101 + 2 · 100

Ziffern: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Basis: 10

Stellenwerte: 1, 10, 100, 1000 (10i für die i-te Stelle von rechts)

 kompakte, einfache Darstellung selbst großer Zahlen

 einfaches Rechnen möglich

(6)

Stellenwertsysteme

 Stellenwertsysteme sind mit beliebiger Basis b ≥ 2 möglich

 z3 z2 z1 z0 = z3 · b3 + z2 · b2 + z1 · b1 + z0 · b0

Basis: b

Ziffern: 0, 1, 2, …, b -1

Stellenwerte: 1, b1 , b2 , b3 , …

Beim Programmieren übliche Stellenwertsysteme:

System Basis Ziffern Stellenwerte

Binär (Dual) 2 0,1 1,2,4,8,16,…

Oktal 8 0,1,2,3,4,5,6,7 1,8,64,512,…

Dezimal 10 0,1,2,3,4,5,6,7,8,9 1,10,100,1000,…

Hexadezimal 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 1,16,256,4096

(7)

Binärsystem (2-er System)

 Rechner stellen Zahlen im Binärsystem dar, weil sich die beiden Ziffern 0, 1 gut darstellen lassen:

Ziffer 1: Strom an / Kondensator geladen

Ziffer 0: Strom aus / Kondensator entladen

 Beispiel: 10101110011102

(8)

Vorzeichendarstellung

 ein Bit wird zur Darstellung des Vorzeichens benötigt.

 restliche Bits zur Darstellung des Betrags der Zahl

 negative Zahl

Betrag wird dargestellt als sogenanntes Zweierkomplement

 Mehr dazu in Hardwaresysteme (HaSy)

 Bei einer Zahlendarstellung mit n Bits stehen (n -1) Bits für die

Betragsdarstellung zur Verfügung

Wertebereich circa [-2n-1; 2n-1]

(9)

Java Ganzzahltypen

Ganze Zahlen heißen auf englisch und in Programmiersprachen Integers

Java definiert 4 verschiedene Integertypen, deren Länge und damit auch Wertebereich fest definiert sind.

Darstellung: 2-er Komplement mit Vorzeichen

Typ Länge kleinste darstellbare Zahl größte darstellbare Zahl

byte 8 Bit -128 127

short 16 Bit -32‘768 32‘767

int 32 Bit -2‘147‘483‘648 2‘147‘483‘647

long 64 Bit -9‘223‘372‘036‘854‘775‘808 9‘223‘372‘036‘854‘775‘807

(10)

Gleitkommazahlen

 Computer stellen gebrochene oder sehr große (sehr kleine) Zahlen als Binärzahlenpaar mit Gleitkomma dar:

Mantisse · 2Exponent

 Die Details sind rechnerabhängig

 Weit verbreitet  Standard IEEE 754 (Institute of Electrical and Electronics Engineers)

Details siehe Vorlesung Hardwaresysteme (Hasy)

 Java definiert 2 verschiedene Gleitkommazahlentypen:

float: 32-Bit Gleitkommazahl nach IEEE 754

double: 64-Bit (double precision) Gleitkommazahl nach IEEE 754

(11)

Gleitkommazahlen

Wertebereich

 z.B. 32-Bit-Gleitkommazahl (float)

größte darstellbare Zahl: ~2 · 2127 = 2128 ≈ 3,4 · 1038

kleinste darstellbare Zahl: ~ (-2) · 2127 = -2128 ≈ -3,4 · 1038

wesentlich größerer Wertebereich als long !!!

Aber: Die größte Zahl hat 128 Binärstellen (39 Dezimalstellen), von denen nur die ersten 24 Binärstellen (7 Dezimalstellen) dargestellt werden!

Gleitkommazahlen sind ungenau!!!

(12)

Nichtnumerische Daten

Codierung:

 Für jede Art von Daten jeweils alle vorkommenden Werte auflisten und durchnummerieren

 Der Rechner verwendet die Nummern statt der Werte

 Beispiele:

Zeichencodes: durchnummerierte Liste von Buchstaben, Ziffern,

Sonderzeichen (z.B. @, ~, §, !) und Steuerzeichen (z.B. Zeilenvorschub)

Befehlscodes: durchnummerierte Liste von Maschinenbefehlen

Farbtabelle: durchnummerierte Liste der am Bildschirm darstellbaren Farben

(13)

Zeichencodes

ASCII

American Standard Code for Information Interchange

7-Bit Code mit den wichtigsten internationalen Zeichen

Normen: ISO/IEC 646, DIN 6603

Latin 1 und 2

8-Bit Code, erweitert ASCII z.B. um Umlaute

Normen: ISO/IEC 8859, DIN 6603

EBCDIC

Extended Binary Coded Decimal Interchange Code

8-Bit Code, üblich auf IBM Großrechnern

Unicode

16-Bit Code, erlaubt die Darstellung von 65‘536 Zeichen

verwendet z.B. in Java und XML

(14)

Java Zeichen

 Die englische Bezeichnung characters (chars) ist auch im Deutschen geläufiger

 Java verwendet 16-bit Unicode characters

Syntax: char

Characters können auch als 2 Byte lange, vorzeichenlose Ganzzahlen verwendet werden

(15)

Java Booleans

Booleans sind logische ("boolsche") Werte. Sie können den

Wahrheitswert wahr oder falsch annehmen, und sie können logisch miteinander verknüpft werden (A oder B, A und B, nicht A).

 Syntax in Java: boolean, mit den möglichen Werten true oder false.

 Im Speicher dargestellt als 4-Byte int, von dem nur 1 Bit verwendet wird

speicherineffizient  32 Bit belegt, 1 Bit verwendet

einfach, schnell, da Prozessoren auf wortgroße Daten optimiert sind

(16)

Überblick: Java skalare Typen

Typ Format, mögliche Werte

byte 8-Bit-Ganzzahl in 2-er Komplementdarstellung short 16-Bit-Ganzzahl in 2-er Komplementdarstellung int 32-Bit-Ganzzahl in 2-er Komplementdarstellung long 64-Bit-Ganzzahl in 2-er Komplementdarstellung float 32-Bit-Gleitkommazahl nach IEEE 754

double 64-Bit-Gleitkommazahl nach IEEE 754 char 16-Bit-Unicode-Zeichen

boolean true, false

(17)

Variablen

Variablen sind benannte und typisierte Speicherportionen, die Werte des angegebenen Typs enthalten können.

 Variablen müssen vor ihrer Benutzung deklariert werden, etwa:

int i;

boolean isEmpty;

double average;

short index1;

char naechstesZeichen;

Java Namenskonventionen:

sprechende Namen: isEmpty statt b17 (lange Variablennamen erzeugen keinen langen Code!)

Variablennamen beginnen mit einem Kleinbuchstaben

Merke: Erst Typ, dann Name!

(18)

Literale

 Literale sind typisierte Konstanten, die etwa verwendet werden können um Variablen zu initialisieren.

 Verschiedene Typen erfordern Literale in verschiedenen Formaten:

Typ Beispielliterale

byte 127, -128

short 32456

int 60273

long 13292367454L, 13292367454l float 87.363F, 87.363f

double 37.266, 37.266D, 37.266d, 26.77e3 char 'A', 'h'

boolean true, false

(19)

Zuweisung

 eine Zuweisung (Assignment) erlaubt, einer Variablen v einen Wert w zuzuweisen

w muss denselben (oder einen engeren) Typ haben wie v.

Syntax (Schreibweise): v = w;

Vorsicht: Das Gleichheitszeichen "=" bedeutet nicht "Test auf

Gleichheit", sondern "mache linke Seite der rechter Seite gleich". In Pseudocode wird Zuweisung häufig geschrieben als: v  w.

Warum kann die linke Seite einer Zuweisung nur eine Variable und kein Literal sein?

(20)

Zuweisung - Beispiele

int i;

int j;

boolean isEmpty;

double average;

char naechstesZeichen;

i = 178;

j = i;

isEmpty = true;

average = 37.266;

naechstesZeichen = 'h';

int i = 178, j;

boolean isEmpty = true;

double average = 37.266;

char naechstesZeichen = 'h';

j = i;

oder auch:

(21)

automatische Typwandlung

auch: implizite Typwandlung/Typanpassung/Typkonversion

englisch: automatic/implicit type conversion/cast

 Werte engerer (niedriger) Typen können an Variablen weiteren (höheren) Typs zugewiesen werden  Java führt automatische Konversion durch

 Beispiel: Aber nicht:

int i = 17;

long j;

j = i;

int i;

long j = 42L;

i = j;

(22)

Skalare Typhierarchie

Der Wertebereich eines engeren Typs ist eine Teilmenge des Wertebereichs eines weiteren Typs. Für die enger-Beziehung

"◄" gelten folgende Regeln:

1. Ganzzahltypen ◄ Gleitzahltypen

2. Ganzzahltypen: byte shortintlong 3. Gleitzahltypen: float double

4. charint

‣ aus 1, 2 und 3 ergibt sich:

byte shortintlong float double

‣ aus 1, 2 und 4 ergibt sich:

charintlong float double

(23)

Skalare Typhierarchie

Merke:

 Kein anderer Typ kann in boolean konvertiert werden, oder umgekehrt

 Die Wandlung von einer Ganzzahl in eine Gleitzahl kann zu Präzisionsverlust führen!

intfloat

longfloat

longdouble

(24)

explizite Typwandlung

 Explizite Typwandlung ist in zwei Richtungen möglich:

aufwärts (englisch: upcast): enger Typ  weiter Typ

abwärts (englisch: downcast): weiter Typ  enger Typ

 Abwärtskonvertierung führt zu Fehlern, wenn Wert nicht in niedrigeren Typen passt!

 Beispiel Aufwärtskonvertierung:

int i = 17;

long j;

j = (long) i;

(25)

explizite Typwandlung

 1. Beispiel Abwärtskonvertierung:

int i;

long j = 42L;

i = (int) j;

 2. Beispiel Abwärtskonvertierung:

int i;

long j = 2500000000L;

i = (int) j;

(26)

Strings

 Strings, d.h. Zeichenketten, sind kein skalarer Typ, sondern

Objekte.

 Strings sind so fundamental, dass es wichtig ist Grundlegendes über ihre Verwendung zu wissen.

 Eine String-Variable wird genauso deklariert wie eine Variable skalaren Typs:

String text;

 Einer String-Variablen kann ein Text zugewiesen werden:

text = "Hallo, Welt!";

 Beides kann zusammengefasst werden zu:

String text = "Hallo, Welt";

(27)

Zu guter Letzt…

We all know that 666 is the number of the Beast, but did you know that...

670 - Approximate number of the Beast DCLXVI - Roman numeral of the Beast

666.0000000 - Number of the High Precision Beast 665.9999954 - Number of the Pentium Beast

0.666 - Number of the Millibeast 1010011010 - Binary of the Beast

$665.95 - Retail price of the Beast

$699.25 - Price of the Beast plus 5% state sales tax

$769.95 - Price of the Beast with all accessories and replacement soul

$606.66 - Wal-Mart price of the Beast Route 666 - Way of the Beast

666 F - Oven temperature for roast Beast

666 mg - Recommended Minimum Daily Requirement of Beast Lotus 6-6-6 - Spreadsheet of the Beast

Referenzen

ÄHNLICHE DOKUMENTE

We may therefore suspect that an appropriate construction of the action in the case when fermionic degrees of freedom 'l',u are also present might be to treat X,u and 'l',u as

Bei der Addition und Subtraktion von Bruchtermen ist zuerst der gemeinsame Nenner zu suchen. Der einfachste gemeinsame Nenner ist das kgV aller Nenner. Erst nach dem Erweitern

• In addition to the particles postulated by the standard model of particle physics, string theory naturally incorporates gravity, and so is a candidate for a theory of everything,

E ine nachhaltige Herstellung von Treibstoffen und von Grund- stoffen für die chemische Industrie erfordert Prozesse, die ohne fossile Rohstoffe wie Erdöl auskommen. Verfahren,

NOTE AC:14, 18 stand for the open vowels (front and back respectively) specifically marked in Marathi orthography and to some extent in Hindi orthography.. NOTE AD: 42 stands for

§ Variable müssen deklariert sein bevor sie verwendet werden können.

Angenommen der binäre Suchbaum ist stark (d.h. maximal) entartet, auf welche Anzahl (minimal, maximal,.. durchschnittlich) von Vergleichen ändert sich

Könnten wir die Typen für alle Variablen-Vorkommen raten, ließe sich mithilfe der Regeln überprüfen, dass unsere Wahl korrekt war :-).. Wie raten wir die Typen der Variablen ???.. , x