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
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
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;
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.
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 ...
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.
Gast KnapsackSolver Geschrieben 11. Juni 2014 Geschrieben 11. Juni 2014 Ok das ist gut möglich. Also die von mir gepostete Lösung funktioniert.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden