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?
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?
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.
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.
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)
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.
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 :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.