Modulo-Arithmetik
|
Arithmetik immer modulo Länge der Operation
|
| |
|
Kein Überlauftest
|
|
Die signifikantesten Stellen werden vergessen
|
| |
Operanden-Längen
und
Vorzeichenbehandlung
|
|
Längenanpassung
|
Regeln
|
1.
|
ein Operand vom Typ long
|
|
Operation in der Länge von long
|
2.
|
sonst
|
|
Operation in der Länge von int
|
| |
|
Arithmetik immer in int oder long int
|
|
Nie Arithmetik mit der Länge von char
|
|
Nie Arithmetik mit der Länge von short, wenn int nicht wie short
implementiert ist.
|
|
Implizite Längenanpassung der Operanden vor der Operation
|
Vorzeichenbehandlung
|
Regeln
|
1.
|
ein Operand vom Typ unsigned
|
|
Operation vorzeichenlos
|
2.
|
sonst
|
|
Operation vorzeichenbehaftet
|
| |
|
Implizite Konversionen der Operanden
|
defensive Programmierung |
|
|
die Konversionsregeln sind gegenüber dem C-Standard noch vereinfacht!
Im Standard sind die Regeln so kompliziert, dass sie völlig unverständlich werden.
|
|
also:
|
|
Ausdrücke mit unterschiedlichen Typen nicht mischen.
|
|
Längen und Vorzeichen der Operanden durch explizite
Konversionen festlegen.
|
|
|
| |
Längenanpassung
|
bei Zuweisungen
|
1.
|
Längen der Typen der rechten und linken Seite gleich
|
|
möglicherweise Vorzeichen angleichen
|
2.
|
Länge des Typs der linken Seite kleiner als die Länge des Typs der rechten Seite
|
|
Signifikante Bits werden abgeschnitten
|
3.
|
Länge des Typs der linken Seite größer als die Länge des Typs der rechten Seite
|
|
Vorzeichenbehaftete oder vorzeichenlose Erweiterung des Wertes in
Abhängigkeit des Typs der rechten Seite
|
|
für fehlerhaftes Mischen von vorzeichenbehafteten und vorzeichenlosen Ausdrücken
|
| |