ja der Code von Thomas hat mir auch weitergeholen.
Jedoch habe ich doch noch zwei Fragen:
1. Warum werden die Werte nochmals mir 0x3FFF UND veknüpft?
Das verändert doch den Wert nicht, oder?
2. Ich überprüfe dann ob das 14te Bit gesetzt ist mit
if (c>=0x1FFF).
Falls ja lasse ich das 14te Bit mit
c=(c & 0x1FFF) nullen.
Und dafür das 16te Bit, welches ja für das Vorzeichen zuständig sein müsste, mit
c=(c | 0x8000) setzen.
Bitte korrigiert mich wenn ich falsch liege: Ich habe gelesen das der Wertebereich von 'short' von -32768 bis +32767 geht. Also um das Darzustellen werden ja 15 Bit benötigt. Plus 1 Bit für's Vorzeichen. Also insgesammt 16 Bit. Deshalb habe ich das 16te Bit setzen lassen.
Damit er die Vorzeichenbehaftete 14Bit Zahl richtig ausgibt.
Leider bekomme ich für dem Wert
11 1111 1111 1111 nach der oben beschriebenen Umwandlung in
1001 1111 1111 1111
mit
printf("%d\n",c) den Wert -24577 zurück statt einfach 0.
Woran liegt das?
Habe ich irgendwo einen Denkfehler?
//edit:
haha
hab gerade eine Eingebung gehabt.
Klar der der Wert Falsch ist das 14te und 15te Bit iss ja 0. Bei der Invertierung wird es wieder 1 und schwups.. der Wert iss FALSCH!
Also es Muß heißen
c=(c | 0xC000) um das 15te und 16 Bit zu setzen und das 14 wird schön in ruhe gelassen!