Forum: PC-Programmierung INT -> USINT Problem


von CheesburgerOhneKäseBitte (Gast)


Lesenswert?

Hallo Leute,

ich habe hier ein kleiens Problem.

Ich habe in einem bestehenden Programm eine INT-Variable (als mit 
Vorzeichenbit), die 16 verschiedene Zustände annehmen kann. Wenn also 
alles auf 1 ist, ist der Zahlenwert -32767.

Ich weise den Zahlenwert der INT-Variable einer UINT-Variable zu, weil 
ich im weiteren gerne mit BOOl-Werten arbeiten möchte.

Ich dachte mir jetzt, daß einfach casten von INT nach UINT dazu führen 
würde, daß die -32767 als 65535 interpretiert wird. Das ist leider nicht 
der Fall.

Wie kann ich das denn sonst bewerkstelligen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

CheesburgerOhneKäseBitte schrieb:
> Ich dachte mir jetzt, daß einfach casten von INT nach UINT dazu führen
> würde, daß die -32767 als 65535 interpretiert wird. Das ist leider nicht
> der Fall.

Wie kommst Du zu dieser Diagnose?

von CheesburgerOhneKäseBitte (Gast)


Lesenswert?

Na ja, zu dieser Diagnose kam ich einfach in der Annahme, daß ich 16 
Einsen eines INT in einen UINT schreibe und das höchstwertige dann eben 
nicht das Vorzeichen ist.

Allerdings hilft mir deine Antwort ansonsten nicht sehr viel weiter.

von Rolf Magnus (Gast)


Lesenswert?

Deine Aussagen sind etwas verwirrend. Hast du's nun (wie im ersten 
Posting angedeutet) ausprobiert und festgestellt, daß es nicht so 
funktioniert oder ist das nur deine Annahme?

Eigentlich müßte es genau so gehen. Deshalb die Frage, wie du 
festgestellt hast, daß es nicht geht.

von Dirk B. (dirkb2)


Lesenswert?

CheesburgerOhneKäseBitte schrieb:
> Wenn also
> alles auf 1 ist, ist der Zahlenwert -32767.
Nein.
Wenn dein INT 16-Bit breit ist, dann hast du (bei Zweierkomplement) -1.
Wenn dein INT 32-BIT breit ist, hast du 65535 (positiv)

Wenn nur die untern 15 Bit gesetzt sind hast du 32767 (positiv)

von CheesburgerOhneKäseBitte (Gast)


Lesenswert?

Hallo Rolf,

ich hab das schon wirklich probiert. Es geht eben wohl nicht so einfach.
Leider habe ich das Programm jetzt nicht da und kann mich nicht mehr 
genau erinnern, aber ich glaube da kam einfach 32767 positiv heraus!?

Jedenfalls nicht die 65535 wie von mir erwartet.

von CheesburgerOhneKäseBitte (Gast)


Lesenswert?

Hallo Dirk,

danke für deinen Beitrag. Jetzt kommen wir der Sache näher.

Allerdings verstehe ich das nicht ganz.

Theoretisch müßte doch 1 rauskommen beim zweier-Komplement (übrigens 
sind meine beiden Variablen 16 Bit lang)

...Deinen Einwand mit den 32-Bit muß ich noch kurz nachrechnen :)

von CheesburgerOhneKäseBitte (Gast)


Lesenswert?

Korrektur:

Hallo Dirk,

du hast recht, der INT bringt (wenn alles eins ist) -1. Diesen Wert 
möchte ich nun auf UINT umkopieren und zwar so, daß die -1 als 65535 
interpretiert wird und ich dachte eben, daß das mit der Typumwandlung 
gehen würde.

von Dirk B. (dirkb2)


Lesenswert?

Um welche Programmiersprache geht es überhaupt?

von CheesburgerOhneKäseBitte (Gast)


Lesenswert?

ST

von CheesburgerOhneKäseBitte (Gast)


Lesenswert?

Danke,

hat sich erledigt.

von Dirk B. (dirkb2)


Lesenswert?

CheesburgerOhneKäseBitte schrieb:
> ST

Da ST nicht gerade zu den verbreitesten Sprachen bei der 
PC-Programmierung zählt, ist es ziemlich ungünstig diese Tatsache zu 
unterschlagen


Zumindest in C klappt das so, da bei einem Cast bei Ganzzahltypen das 
Bitmuster erhalten bleibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.