Step 7 Integer in Double Integer umwandeln

Anger

Level-2
Beiträge
71
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe einen Integer-Wert den ich in einen Datenbaustein transferieren möchte.
Die Varibale im DB ist als Double Integer deklariert.
Kann ich meinen Integer-Wert direkt in die Double Integer Varibale des DB's transferieren oder muss er vorher mit Hilfe von ITD umgewandelt werden?

Gruß
Anger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Solltest Du mit ITD umwandeln, ansonsten bekommst Du Probleme, sobald Du mit negativen Zahlen arbeitest.
Das Vorzeichen ist immer das höchstwertige Bit, bei Integer also Bit 15, bei Double Bit 31. Wenn Du nur verschiebst, bleibt das Vorzeichenbit an Stelle 15 und wird nicht auf 31 verschoben. Damit hast Du eine ganz andere (positive) Zahl.
 
UINT = 16 Bit Ganzzahl Vorzeichenlos = 0-65535

INT = 16 Bit Vorzeichenbehaftet = -32768 ... 0 .... 32767

P.S. Gerade gesehen, das du deinen Beitrag als Step7 getagged hast, hier gibt es UINT als Datentyp nicht explizit.

Mfg
Manuel
 
Zuletzt bearbeitet:
@Manuel:
Da wäre es dann ein Word - auch wenn du da diese Zahl nicht direkt reinschreiben kannst (nur als Hex-Wert).
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Larry Laffer: Nicht DWord, sondern WORD... immer noch 16 Bit.

@Anger:
Vielleicht nochmal anders beschrieben, zum besseren Verständnis:
Du hast 16Bit zur Verfügung, also ein WORD.
In diesem kannst Du also Werte von 0..655535 speichern.
Das entspricht einem UInt, einem unsigned (vorzeichenlosem) Integer. Das ist eher ein Typ aus Hochsprachen, wo man wiederum das WORD nicht als Datentypen kennt...
Nimmst Du nun das höchstwertige Bit, um das Vorzeichen zu speichern, so hast Du nur noch 15Bit zur Verfügung, um Deine Zahl zu speichern, also 32767, dafür aber eben im positiven, wie im negativen.
Das kann man mit dem Windows-Rechner sich ganz gut veranschaulichen, wenn man auf wissenschaftliche Ansicht umstellt und dann mal zwischen binär und dezimal hin- und herschaltet.

Zu Deiner Frage: Wenn Deine Zahl jetzt "größer" wird, kann sie nicht gespeichert werden, weil Dir einfach Bits fehlen, um den zusätzlichen Wertebereich zu speichern. Daher bekommst Du einen "Überlauf" --> Wie die Regenwassertonne. Der letzte Tropen paßt nicht mehr rein.
Überlauf bedeutet, die Zahl springt von ihrem größten auf ihren kleinsten Wert:
WORD/UInt: 1111 1111 1111 1111 (binär) = 65535 --> 0000 0000 0000 0000 (binär) = 0
INT/SInt: 0111 1111 1111 1111 (binär) = 32767 --> 1000 0000 0000 0000 (binär) = -32768

Da liegt also der entscheidende Unterschied: Wenn Du einen Überlauf bekommst, fängst Du einmal (WORD) wieder bei 0 an zu zählen, das andere Mal (INT) bei -32768.
So lange Du Dich (sicher) im Wertebereich 0..32767 bewegst, brauchst Du Dir über den Datentypen keine Gedanken machen. Nur, wenn Du diesen Wertebereich verläßt/verlassen willst/unvorhergesehen verlassen könntest...
 
Zurück
Oben