Veröffentlicht 10. Juni 201411 j Hallo Community, ich habe mal wieder eine Fragen Ich habe eine 12 Bit große Zahl ( Digital-to-Analog Converter). Diese 12 Bit große Zahl muss ich nun in 2 Teile zerlegen! Die höherwertigsten 4 Bit ( vom MSB rückwärts gezählt) müssen in eine byte Variable. Die hinterstens 8 Bit müssen in eine weitere Variable. Wie bekomme ich das gelöst? Zur weiteren Erklärung, Ausgangssitaution: 12 Bit Zahl (z.B. 1011 0110 1110) Die ersten 4 Bit müssen in eine Variable also variable1 = 1011 Die letzten 8 Bit müssen in eine Variable also variable2 = 0110 1110 Ich hoffe ihr könnt mir helfen
10. Juni 201411 j Moin! Wieder einmal sind die shift- und UND-Operatoren Deine Freunde. Die oberen 4 Bit einfach nach rechts shiften und dann zuweisen. Bearbeitet 10. Juni 201411 j von Pointerman
11. Juni 201411 j Ja habs hin bekommen... Also sowas hier hab ich gesucht UINT16 u8_MASK = 000011111111; UINT8 u8_4BitMSB = u16_value>>8; UINT8 u8_8BitLSB = u16_value&u8_MASK; UINT8 u8_cmdValReg = u8_cmdReg | u8_4BitMSB;
11. Juni 201411 j UINT16 u8_MASK = 000011111111; Das funktioniert nicht. C und C++ kennen keine Literale für Dualzahlen. u8_MASK hat nicht den erwarteten Wert 255, sondern 37449, weil Zahl-Literale, die mit einer 0 beginnen, als oktal interpretiert werden. Setz u8_MASK auf 255 oder 0xff, dann passt das.
11. Juni 201411 j Wieso funktioniert das so nicht? Also ich verstehe die Begründung nicht. Ich bin hier ja bei C. Wenn ich hier jetzt z.B. 0b000011111111 schreibe funktioniert das ...
11. Juni 201411 j Ich bin hier ja bei C. Wenn ich hier jetzt z.B. 0b000011111111 schreibe funktioniert das ... Dann benutzt du einen Compiler, der das unterstützt, beispielsweise GCC. Vom C-Standard vorgeschrieben ist diese Funktionalität nicht.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.