Der Zahlenkreis
Eine INT-Zahl besteht aus 16 Bit und kann damit 216 = 65536 verschiedene Bitmuster annehmen. Diese Bitmuster lassen sich wie die Zahlen auf einer Uhr im Kreis anordnen: Oben steht die 0. Im Uhrzeigersinn folgen die positiven Zahlen, unten schliessen die negativen Zahlen an und laufen von links wieder zur 0 hinauf.
So wird die Zahl gespeichert
Unter dem Kreis siehst du das Bitmuster. Du kannst einzelne Bits anklicken – der Zeiger wandert sofort an die passende Position.
Das höchste Bit = Vorzeichenbit
- Bit 15 = 0 → Zahl ist 0 oder positiv
- Bit 15 = 1 → Zahl ist negativ
- Es ist aber kein «Minus-Schalter»: das Bit hat das Gewicht −32768
Wertigkeit der Bits
- Bit 0 … 14: Gewichte 1, 2, 4 … 16384
- Bit 15: Gewicht −32768
- Wert = Summe der Gewichte aller gesetzten Bits
Einerkomplement und Zweierkomplement
Wie macht die SPS aus +5 die Zahl −5? Dafür gibt es zwei Verfahren, die beide auf dem Invertieren der Bits beruhen.
Einerkomplement
- Alle Bits invertieren (
NOT) - Ergebnis: −x − 1
- Es gibt zwei Nullen (+0 und −0)
- Wird für INT nicht als Zahlendarstellung verwendet
Zweierkomplement
- Einerkomplement + 1
- Ergebnis: −x
- Es gibt nur eine Null
- Darstellung der negativen Zahlen bei SINT, INT und DINT
Schritt für Schritt: Vorzeichen wechseln
Alle 16 Bitmuster im Vergleich (4 Bit)
| Bitmuster | Ohne Vorzeichen | Einerkomplement-Darstellung | Zweierkomplement (S7) |
|---|
0000 und 1111) und damit nur 15 verschiedene Zahlen. Das Zweierkomplement nutzt alle 16 Muster – deshalb gibt es genau einen negativen Wert mehr als positive.Warum Zweierkomplement? Subtrahieren durch Addieren
Das Rechenwerk muss nur addieren können. Eine Subtraktion ist die Addition des Zweierkomplements. Beispiel im 4-Bit-Modell: 5 − 3 = 5 + (−3)
| +5 | 0101 |
| −3 (Zweierkomplement von 3) | 1101 |
| Summe | 1 0010 |
| Übertrag fällt weg → Ergebnis | 0010 = +2 |
Grenzen des Datentyps INT
| Eigenschaft | INT |
|---|---|
| Grösse | 16 Bit = 1 Wort = 2 Byte |
| Anzahl Bitmuster | 216 = 65536 |
| Wertebereich | −32768 … +32767 |
| Bitmuster (hex) | 16#8000 … 16#7FFF |
| Vorzeichenbit | Bit 15 (Gewicht −32768) |
| Negative Zahlen | −1 … −32768 → 32768 Werte |
| Null und positive Zahlen | 0 … +32767 → 32768 Werte |
Wichtige Werte
| Dezimal | Binär (16 Bit) | Hex | Bemerkung |
|---|---|---|---|
| 0 | 0000 0000 0000 0000 | 16#0000 | Alle Bits 0 |
| +1 | 0000 0000 0000 0001 | 16#0001 | |
| +32767 | 0111 1111 1111 1111 | 16#7FFF | Grösster Wert |
| −32768 | 1000 0000 0000 0000 | 16#8000 | Kleinster Wert |
| −2 | 1111 1111 1111 1110 | 16#FFFE | |
| −1 | 1111 1111 1111 1111 | 16#FFFF | Alle Bits 1 |
Überlauf
Im Zahlenkreis steht +32767 direkt neben −32768. Wird zu +32767 eine 1 addiert, läuft der Zeiger über die rote Naht und landet bei −32768. Umgekehrt führt −32768 − 1 auf +32767.
Vergleich ganzzahliger Datentypen mit Vorzeichen
| Datentyp | Bit | Wertebereich |
|---|---|---|
| SInt | 8 | −128 … +127 |
| Int | 16 | −32’768 … +32’767 |
| DInt | 32 | −2’147’483’648 … +2’147’483’647 |