• Keine Ergebnisse gefunden

Zahlenrepr¨asentation ¨Ubung1am18.4.2002

N/A
N/A
Protected

Academic year: 2021

Aktie "Zahlenrepr¨asentation ¨Ubung1am18.4.2002"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungen zur Vorlesung ¨

” Grundlagen der Informatik 2“

Studiengang E-Technik SoSe 2002

AG Betriebssysteme, FB 3 Jan Bredereke

Ubung 1 am 18.4.2002 ¨

Zahlenrepr¨ asentation

Das Aufgabenblatt 1 ist noch nicht f¨allig, sondern erst am 2.5.2002. Das Beweispapier dazu im Web wird noch ¨uberarbeitet werden.

Zum Vorrechnen kann Aufgabe 2 auf Blatt 1 (der Beweis) gerne auf zwei Leute aufgeteilt werden.

Varianten und Bit-Felder in C

Hiermit kann man die Maschinenrepr¨asentation einer Zahl inspizieren.

Struktur/Struct Ist bereits bekannt.

Man kann mehrere Variablen als eine Einheit behandeln. Die Variablen k¨onnen auch verschie- dene Typen haben. Beispiel:

/* Komplexe Zahl */

typedef struct {

int r; /* Real-Anteil */

int i; /* imaginaerer Anteil */

} complex;

complex c, *pc;

...

c.r = 1;

c.i = 2;

pc = &c;

Repr¨asentation im Speicher:

n r

31

. . . r

0

n + 1 i

31

. . . i

0

Annahme: Integers sind 32 Bit lang.

(2)

Bit-Feld

Man kann auch mehrere Komponenten in einem Speicherwort ablegen lassen, sofern man pro Komponente mit weniger Bits / weniger Wertebereich auskommt:

typedef struct { unsigned tag : 5;

unsigned monat : 4;

unsigned jahr : 12;

} datum;

datum d = {18, 4, 2002};

Nur der Typ unsigned ist f¨ur Komponenten erlaubt.

Repr¨asentation im Speicher:

n (unbelegt) j

11

. . . j

0

m

3

. . . m

0

t

4

. . . t

0

Achtung: Auf Big-Endian-Maschinen kann die Belegung andersherum sein. Das ist f¨ur uns hier aber nicht relevant.

Variante/Union

Varianten sind Variablen, die Werte verschiedenen Typs enthalten k¨onnen. Allerdings immer nur abwechselnd. Beispiel:

typedef enum {symb, nummer} token_t;

typedef struct { token_t sel;

union {

char buchst;

int zahl;

} val;

} token;

token t;

...

t.sel = symb;

t.val.buchst = ’A’;

t.sel = nummer;

t.val.zahl = 42;

Repr¨asentation im Speicher:

n (unbelegt) s

0

n + 1 (unbelegt) b

7

. . . b

0

oder

n (unbelegt) s

0

n + 1 z

31

. . . z

0

Es wird genau genug Platz f¨ur die gr¨oßte Variante reserviert.

2

(3)

Typumwandlung mit Varianten ...

t.sel = symb;

t.val.buchst = ’A’;

printf("%d", t.val.zahl);

Was passiert hier?

In C zwingt uns nichts, immer nur auf die aktive Variante zuzugreifen. Wenn wir eine andere Variante w¨ahlen, dann wird dasselbe Bitmuster einfach anders interpretiert. Hier wird ein char pl¨otzlich als int interpretiert.

Ergebnis ist hier 49, da wir den ASCII-Code zur Buchstabendarstellung benutzen. (Falls die unbelegten Bits 0 enthielten.)

Varianten sind gef¨ahrlich, weil man leicht Fehler machen kann.

Inspektion der internen Zahlenrepr¨ asentation

Man kann mit Varianten und Bitfeldern die interne Repr¨asentation von Daten erkunden:

/* Inspektion der internen Zahlenrepr¨asentation */

#include <stdio.h>

typedef struct { unsigned b00 : 1;

unsigned b01 : 1;

unsigned b02 : 1;

unsigned b03 : 1;

unsigned b04 : 1;

unsigned b05 : 1;

unsigned b06 : 1;

unsigned b07 : 1;

unsigned b08 : 1;

unsigned b09 : 1;

unsigned b10 : 1;

unsigned b11 : 1;

unsigned b12 : 1;

unsigned b13 : 1;

unsigned b14 : 1;

unsigned b15 : 1;

} bitFeld;

typedef union { short zahl;

bitFeld feld;

} zahlOderFeld;

void druckFeld(zahlOderFeld zf) {

printf("%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u\n", zf.feld.b15,

3

(4)

zf.feld.b14, zf.feld.b13, zf.feld.b12, zf.feld.b11, zf.feld.b10, zf.feld.b09, zf.feld.b08, zf.feld.b07, zf.feld.b06, zf.feld.b05, zf.feld.b04, zf.feld.b03, zf.feld.b02, zf.feld.b01, zf.feld.b00);

}

int main() {

zahlOderFeld zf;

zf.zahl = 3;

druckFeld(zf);

zf.zahl = -2;

druckFeld(zf);

return 0;

}

4

Referenzen

ÄHNLICHE DOKUMENTE

Bitte beachten Sie, dass Sie zur vollständigen Lösung der Aufgabe die Excel- Datei Uebung4 - Aufgabe 2 - Angabe.xls benötigen, die Sie auf unserer Hompage ganz unten finden..

t=0 : Wenn zum Zeitpunkt t=0 der Schalter geschlossen wird, entlädt sich der Kondensator über die Spule.. b) Welche Größen entsprechen sich

[r]

Kann man diese so wählen, dass die Funktionen die obigen

Bitte schreiben Sie Ihren Namen und Ihre Übungsgruppe (beispielsweise Mi 8-10 Uhr) oben auf ihre Abgabe und geben Sie keine losen Blätter ab (Tackern/Büroklammer/...).. Aufgabe

Dann ist E ein Vektorraum und da die beiden Rich- tungsvektoren linear unabhängig sind, bilden diese eine Basis von E.. Da die Basis aus zwei Vektoren besteht, ist E

(d ∗ ) Zeigen Sie, dass die Theorie der dichten linearen Ordnungen ohne Endpunkte Quantore- nelimination erlaubt. Hinweis: Benutzen Sie die disjunktive Normalform zur Darstellung

(a) Für das (ω × ω)-Schokoladenspiel betrachten wir eine “quadratische“ Schokoladentafel, die sowohl nach oben als auch nach rechts unendlich ist.. Formal können