21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

15 Bitfelder<br />

Bei Strukturen kann für <strong>in</strong>t Member angegeben werden, wieviele Bit's sie belegen sollen. (Aber<br />

pro Feld nicht mehr als es Bits <strong>in</strong> e<strong>in</strong>em <strong>in</strong>t hat). Die Bits werden fortlaufend von e<strong>in</strong>em <strong>in</strong>t vergeben,<br />

<strong>und</strong> sobald es für e<strong>in</strong> neues Feld ke<strong>in</strong>en Platz im angebrochenen <strong>in</strong>t mehr hat, wird das ganze<br />

Feld <strong>in</strong> e<strong>in</strong>em neuen <strong>in</strong>t abgelegt <strong>und</strong> von <strong>die</strong>sem <strong>in</strong>t mit der Bitzuteilung weitergefahren. Bitfelder<br />

können nicht über <strong>in</strong>t-Grenzen h<strong>in</strong>weggehen.<br />

Mit Bitfeldern kann Speicherplatz gespart werden, oder es können Register von Peripheriebauste<strong>in</strong>en<br />

abgebildet werden. Achtung, bei Bitfeldern ist fast alles herstellerabhängig, Programme <strong>die</strong><br />

von der tatsächlichen Bitposition im Speicher abhängen, s<strong>in</strong>d mit Sicherheit nicht portabel!<br />

struct Date {<br />

<strong>in</strong>t Day : 5; /* Fuer den Tag brauchen wir nur 5 Bit (0...31) */<br />

<strong>in</strong>t Month : 4; /* Fuer den Monat reichen 4 Bit (0...15) */<br />

<strong>in</strong>t Year : 7; /* Fuer 2 stellige Jahrzahlen genuegen 7 Bit (0...128) */<br />

} Heute;<br />

Heute.Day = 24;<br />

Heute.Month = 12;<br />

Heute.Year = 99;<br />

Diese Struktur Date für Daten braucht somit nur 16 Bit oder 2 Bytes Speicherplatz.<br />

Auch Flags (E<strong>in</strong>zelne Bits) können so Platzsparend abgelegt werden:<br />

struct FileInfo {<br />

<strong>in</strong>t Readonly : 1;<br />

<strong>in</strong>t Hidden : 1;<br />

<strong>in</strong>t System : 1;<br />

<strong>in</strong>t Archived : 1;<br />

<strong>in</strong>t L<strong>in</strong>k : 1;<br />

};<br />

Diese Flags benötigen nur 5 Bits, können also problemlos <strong>in</strong> e<strong>in</strong>em Byte abgelegt werden.<br />

Man muss sich aber im klaren se<strong>in</strong>, dass man so zwar Speicherplatz spart, aber der Rechenaufwand<br />

grösser wird. Schliesslich muss der Compiler auf <strong>die</strong> e<strong>in</strong>zelnen Bits mit Schieben, And- <strong>und</strong> Or-<br />

Verknüpfungen zugreifen.<br />

Beispiel Datestruktur:<br />

Year (7 Bit) Month (4) Day (5 Bit)<br />

15 9 8 5 4 0<br />

/* Die Anweisung */<br />

Heute.Month = a;<br />

/* wird vom Compiler übersetzt zu */<br />

Heute = (Heute & 0xFE1F) | ((a & 0x000F) > 5) & 0x000f;<br />

/* Und falls das Vorzeichen erhalten bleiben soll, zu */<br />

b = (Heute > 11;<br />

Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 55/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!