Hallo zusammen,
ich bräuchte Hilfe. Ich habe ein IC, das 18bit signed Werte ausgibt. Jetzt will ich die Werte auf der Konsole mit printf() ausgeben. Das Problem ist nun, dass die negativen Werte nicht richtig dargestellt werden. Ich bekomme ständig Überläufe. Der Wertebereich liegt ja zwischen 131071 und -131072. Aber da ich die Zahlen auf int32_t casten muss (der µC kann ja keine 18bit Werte). Daher werden die Werte alle als positive Zahl behandelt.
Zwischen positiven und negativen Zahlen zu unterscheiden kann ich, wenn ich einfach das 17te Bit anschaue. Wenn das 1 ist, dann ist die Zahl negativ. Und jetzt kommt das Problem. Ich begreife nicht, wie ich nun die int32_t Zahl zusammenbauen muss, dass die Zahlen den richtigen Wertebereich zwischen 131071 und -131072 haben. Eigentlich müsste es doch reichen, wenn ich die Bits 19 bis 31 auf 1 setzt, wenn es eine negative Zahl ist und dann die 18bit Zahl einfach an die unteren Stellen kopiere. Aber irgendwie bekomme ich das nicht hin. Oder kann man das über eine normale Rechenoperation machen? Die Zeit spielt ja keine Rolle.
Ich wollte die Funktion so bauen, dass man die Bitbreite mit übergibt, so dass man auch 24bit Werte wandeln könnte (Das IC liefert auch solche - Ist ein Prototyp IC).
Der Compiler ist auf die erste Optimierungsstufe eingestellt und ich hab die Vermutung, dass da auch noch was reinfunkt.
Hat jemand von euch einen Gedankenanstoß für mich?
Danke euch!
Grüße, Jens