Gast KnapsackSolver Geschrieben 10. Juni 2014 Geschrieben 10. Juni 2014 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 Zitieren
Pointerman Geschrieben 10. Juni 2014 Geschrieben 10. Juni 2014 (bearbeitet) 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 2014 von Pointerman Zitieren
Gast KnapsackSolver Geschrieben 11. Juni 2014 Geschrieben 11. Juni 2014 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; Zitieren
Klotzkopp Geschrieben 11. Juni 2014 Geschrieben 11. Juni 2014 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. Zitieren
Gast KnapsackSolver Geschrieben 11. Juni 2014 Geschrieben 11. Juni 2014 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 ... Zitieren
Klotzkopp Geschrieben 11. Juni 2014 Geschrieben 11. Juni 2014 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. Zitieren
Gast KnapsackSolver Geschrieben 11. Juni 2014 Geschrieben 11. Juni 2014 Ok das ist gut möglich. Also die von mir gepostete Lösung funktioniert. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.