Zu hohe Werte in int Datentyp

NBOne

Mitglied
Hallo,

in meiner Datenbank wurden einige Werte falsch geschrieben, die ich jetzt korrigieren muss. Es wurde im Code Werte über 32767 in int Vars geschrieben, diese wurden dann in die Datenbank geschrieben. Um sie zu rekonstruieren habe ich folgende Fragen:

1) Wenn ich in eine Signed Int Variable 32268 schreibe, dann ist der Wert der Variable -32268, richtig?
2) Die Formel, um falsche int Werte aus der DB wieder umzuwandeln lautet also:

F - Falscher Wert aus der DB
X - Möglichkeit (fängt bei 0 an). 0 ist die erste Möglichkeit die der Long Wert gehabt haben könnte

32768 + (32768 + F) + (X*65536)

Geht ihr da mit mir konform?

Wenn in der DB also beispielsweise -32765 steht, dann kann der ursprüngliche Wert
1) 32771 (X=0)
2) 98307 (X=1)
3) 168843 (X=2)
.
.
.
gewesen sein.

Kann mir jemand helfen in dem er mir sagt ob diese Überlegung richtig ist?

Vielen Dank für eure Hilfe
 
Hallo,
Hallo,

in meiner Datenbank wurden einige Werte falsch geschrieben, die ich jetzt korrigieren muss. Es wurde im Code Werte über 32767 in int Vars geschrieben, diese wurden dann in die Datenbank geschrieben. Um sie zu rekonstruieren habe ich folgende Fragen:

1) Wenn ich in eine Signed Int Variable 32268 schreibe, dann ist der Wert der Variable -32268, richtig?
2) Die Formel, um falsche int Werte aus der DB wieder umzuwandeln lautet also:

F - Falscher Wert aus der DB
X - Möglichkeit (fängt bei 0 an). 0 ist die erste Möglichkeit die der Long Wert gehabt haben könnte

32768 + (32768 + F) + (X*65536)

Geht ihr da mit mir konform?

Wenn in der DB also beispielsweise -32765 steht, dann kann der ursprüngliche Wert
1) 32771 (X=0)
2) 98307 (X=1)
3) 168843 (X=2)
.
.
.
gewesen sein.

Kann mir jemand helfen in dem er mir sagt ob diese Überlegung richtig ist?

Vielen Dank für eure Hilfe
du liegst mit deinen Überlegungen eigtl. ganz richtig. Ein Überlauf sollte für gewöhnlich bei allen Prozessoren zum "Wraparound" führen... Aber wieso provbierst dus nicht einfach selbst aus?
Allerdings muss es nicht sein das eine signed int Variable gerade 16- Bit groß ist. Das ist nämlich dann Prozessorabhängig je nachdem ob du einen 16-Bit, 32-Bit oder 64-Bit Prozessor hast variiert die Größe eines ints dementsprechend...
Für einen 32 Bit Prozessor sollten deine Überlegungen dementsprechend auf 2147483648 (2^32/2) übertragbar sein...

Gruß,
RedWing
 
Hallo,

ja, das mit der Int Größe weiß ich, bei mir sind es aber 16bit.

Hab auch gerade in einem Praxisbeispiel das ganze überprüft und es stimmt.

Danke für eure Hilfe!
 
Zurück