von Christoph Bach Operatoren in C WICHTIG: steht für das Semikolon In diesem Teil geht es um die Opera- toren in C. Einen Teil davon (die Vergleichsoperatoren) haben wir schon im letzten Kurs kennengelernt. Heute geht es um die arithmetischen Opera- toren. +-* sind von BASIC bekannt. Sie können in C genauso eingesetzt werden. Zur Division gibt es zwei Operatoren: / entspricht DIV in Turbo-Basic. Damit berechnet man den ganzzahligen Anteil einer Division. % entspricht MOD in Turbo-Basic. Damit berechnet man den ganzzahligen Rest einer Division. Im ersten Teil des Listings werden den Variablen X und Y die Startwerte 34 und 12 zugewiesen. Anschliesend wird wie in Basic addiert, subtrahiert, multi- pliziert, dividiert und der Rest be- rechnet und mit printf() angezeigt. Wer dem Computer nicht traut, und das sollte man nie, der kann die Ergebnisse nachrechnen. Jetzt kommen wir zu einer Stärke von C: der Maschinennahen Programmierung (auf Bitebene). Da diese Operationen den wenigsten vertraut sind, eine genauere Erläuterung: x wird die Zahl 22 zugewiesen, und y die Zahl 3. Wir betrachten nur die unteren acht Bit, dann schaut das in der binären Form so aus: Bitwert 128 64 32 16 8 4 2 1 x=22= 0 0 0 1 0 1 1 0 y=3= 0 0 0 0 0 0 1 1 Man addiert alle Bitwerte zusammen, unter denen eine Eins steht, und bekommt so den Wert der Zahl. z.B. x=16+4+2=22 xöy oder 0 0 0 1 0 1 1 1 x&y und 0 0 0 0 0 0 1 0 x^y exor 0 0 0 1 0 1 0 1 Das höherwertigere Byte ist dabei Null. Mit der Wellenlinie (Tilde), die durch $- ersetzt wird, kann man das Zweierkomplement bilden, das heißt aus einer Null wird eine Eins und umgekehrt. Bitwert 128 64 32 16 8 4 2 1 x=22= 0 0 0 1 0 1 1 0 $- x 1 1 1 0 1 0 0 1 Das höherwertige Byte wird dabei zu 255 (lauter Einser), weshalb die Zahl als negativ interpretiert wird. In C gibt es auch logische Operatoren. Das logische UND, in BASIC AND schreibt man in C &&, das logische ODER, in BASIC OR schreibt man in C mit 2 senkrechten Strichen ("SHIFT ="). Es gibt nur die Zustände Null und ungleich Null. Alles was größer oder kleiner Null ist, wird als logisch eins (wahr) gewertet. Die logische Negation, in BASIC NOT, schreibt man in C ! (Ausrufungszeichen). Zu Testzwecken kann man im Beispiellisting die Werte für x und y ändern, um andere Ergeb- nisse der logischen Operatoren zu erhalten. Eine weitere Spezialität von C sind die Schiebeoperatoren. Mit ihnen kann man sehr schnell mit Vielfachen der Zahl Zwei multiplizieren und dividieren. In Assembler schreibt man ASL (Arithemtik Shift Left), in C <<. x << y bedeutet, daß das Bitmuster von x nach links geschoben wird, und zwar y mal. Bitwert 128 64 32 16 8 4 2 1 x=22= 0 0 0 1 0 1 1 0 x<<1 0 0 1 0 1 1 0 0 x<<2 0 1 0 1 1 0 0 0 x<> in C. Das Verschieben nach rechts entspricht einem /2. Bitwert 128 64 32 16 8 4 2 1 x=22= 0 0 0 1 0 1 1 0 x>>1 0 0 0 0 1 0 1 1 x>>2 0 0 0 0 0 1 0 1 x>>y 0 0 0 0 0 0 1 0 1 2 3 22/2=11/2=5/2=2 Jetzt kommen wir zu einem Thema, das C-Programme für den Ungeübten schwer lesbar macht. Es gibt eine verkürzte Schreibweise für bestimmte Operatoren. Statt x=x+y kann man auch x+=y schreiben, und erreicht damit den gleichen Effekt: der Wert von y wird zu x addiert. Das Gleiche gilt für die Operatoren -*/%, wie man aus dem Beispiellisting ersehen kann. Die meiste Verwirrung verursachen aber in der Regel die Inkrement- und Dekrementoperatoren. Um die Variable x um eins zu erhöhen, kann man sowohl x++ als auch ++x schreiben. Der Unter- schied besteht darin, daß bei x++ zuerst der Wert von x benutzt wird (z.B. in printf) und dann erst in- krementiert wird, während bei ++x zuerst der Wert von x erhöht wird, und anschliesend wird x erst benutzt. Das Gleiche gilt für den Operator --, nur daß dieser den Wert einer Variablen um eins vermindert. Im Beispiellisting wird abwechselnd nur x und anschliesend x mit vor oder nachgestelltem ++ und -- am Bildschirm angezeigt. Statt x++ kann man natürlich x+=1 oder x=x+1 schreiben, wobei letzteres auch für C-Laien verständlich ist. Durch die verkürzte Schreibweise spart man sich etwas Tipparbeit. Wenn man ein solches Programm nachvollziehen will, braucht man aber etwas mehr Zeit. Zum Schluß noch ein paar Worte zum Listing. getchar() wartet auf einen Tastendruck. Um das Prozent-Zeichen auf dem Bildschirm anzuzeigen, wurde mit %c auf einen Character hingewiesen, der den ASCII-Wert 37 hat. Wie man sieht können in einer printf() Anweisung mehrere Formatierungszeichen enthalten sein, man kann sogar Rechnen (letztes Beispiel mit ++). Viel Spaß bei weiteren Experimenten. Falls Sie übrigens Wünsche oder Anregungen für unseren C Kurs haben sollten, so zögern Sie bitte nicht uns zu schreiben. Alle Anfragen werden von uns an den Autor weitergeleitet. Für diejenigen, die erst jetzt an dem C Kurs Interesse zeigen, empfehlen wir die Anschaffung des ACE-C-COMPILERS, den wir auf der PD-DISK #73 anbieten. Wir freuen uns auf Ihre Zuschriften.