30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

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.

60 3. Operatoren<br />

Def<strong>in</strong>ition, dass 0 als false gilt, jedoch war nicht genau def<strong>in</strong>iert, was nun<br />

als true gilt. Irgendetwas ungleich 0 eben. Aus diesem Grund gibt es <strong>in</strong><br />

C ke<strong>in</strong>e exakte Def<strong>in</strong>ition, welchen Wert sie für true liefern. In C ++ jedoch<br />

gilt garantiert, dass die Operationen e<strong>in</strong> “echtes” C ++ true, also 1 liefern.<br />

In den meisten Fällen mag das unwichtig se<strong>in</strong>, allerd<strong>in</strong>gs gibt es Umstände,<br />

z.B. beim Abspeichern von boolean-Werten <strong>in</strong> bestimmten E<strong>in</strong>zelbits e<strong>in</strong>er<br />

Ganzzahl, wo diese genauere Def<strong>in</strong>ition von C ++ sehr nützlich se<strong>in</strong> kann.<br />

Vorsicht Falle: Der Vergleichsoperator == kann nur allzu leicht e<strong>in</strong>mal<br />

durch e<strong>in</strong>e Unachtsamkeit <strong>in</strong> e<strong>in</strong>em Programm zum Zuweisungsoperator =<br />

mutieren. Da die Zuweisung so def<strong>in</strong>iert ist, dass sie als Ergebnis den zugewiesenen<br />

Wert liefert, betrachtet das der Compiler ke<strong>in</strong>eswegs als Fehler.<br />

Soll er auch gar nicht, denn oft wird dies tatsächlich absichtlich gemacht.<br />

Moderne Compiler produzieren allerd<strong>in</strong>gs mittlerweile zum Glück Warn<strong>in</strong>gs<br />

über possible un<strong>in</strong>tended assignments, die man mit entsprechenden Klammerungen<br />

verh<strong>in</strong>dern kann.<br />

Als logische Verknüpfungsoperatoren f<strong>in</strong>det man <strong>in</strong> C ++ auch wieder die<br />

alten Bekannten, die es schon <strong>in</strong> C gab: && repräsentiert e<strong>in</strong> logisches AND,<br />

|| e<strong>in</strong> logisches OR und ! e<strong>in</strong> logisches NOT.<br />

Bis auf den Tipp, dass gerade bei Verknüpfungen mehrerer logischer Abfragen<br />

durch diese Operatoren e<strong>in</strong>e entsprechende Klammerung den Code<br />

sehr viel lesbarer macht als e<strong>in</strong>e e<strong>in</strong>fache Ane<strong>in</strong>anderreihung, möchte ich zu<br />

diesen Operatoren ke<strong>in</strong>e weiteren Worte verlieren. Sie s<strong>in</strong>d ganz e<strong>in</strong>fach <strong>in</strong>tuitiv<br />

anwendbar.<br />

Lesern, die <strong>in</strong> C ungeübt s<strong>in</strong>d, wird zum Thema der Vergleichsoperatoren<br />

und der logischen Verknüpfungen Abschnitt 5.3 aus <strong>Softwareentwicklung</strong> <strong>in</strong><br />

C noch Zusatz<strong>in</strong>formation geboten.<br />

3.4 Bitoperatoren<br />

Die Bit-Verknüpfungsoperatoren & (Bit-AND), | (Bit-OR), ^ (Bit-XOR) und<br />

~ (Bit-NOT oder auch Komplement bzw. 1-er Komplement) sowie die entsprechenden<br />

Bit-Shiftoperatoren > (Bitright-shift<br />

bzw SR) stehen <strong>in</strong> C ++ zur Manipulation von E<strong>in</strong>zelbits und<br />

Bitmasken <strong>in</strong> ganzzahligen Werten zur Verfügung.<br />

Leider hat sich vor allem <strong>in</strong> den letzten Jahren die Me<strong>in</strong>ung stark e<strong>in</strong>gebürgert,<br />

dass man dieses “masch<strong>in</strong>ennahe Zeug” ja sowieso nicht braucht<br />

und dass das nur für Assemblerprogrammierer <strong>in</strong>teressant ist. Dies ist mitnichten<br />

der Fall! Im Pr<strong>in</strong>zip begegnen Softwareentwicklern viel öfter sogenannte<br />

Flags, als auf den ersten Blick zu vermuten wäre (z.B. bei File-<br />

Operationen). Weiters hilft das Wissen um Bitrepräsentationen und Bitope-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!