Halbbyte eines Ascii-Zeichen ausgeben



  • Hallo,
    ich habe folgende Aufgabe zu lösen:

    Schreiben Sie ein interaktives C-Programm, das den Benutzer auffordert, ein Zeichen aus dem ASCII-Code einzugeben und das daraufhin den Wert des höherwertigen Halbbytes des Zeichens und den Wert des niederwertigen Halbbytes des Zeichens ausgibt.

    Bis zur Eingabe des Ascii-Zeichens habe ich es noch verstanden, aber was nun?
    Wenn der Benutzer z.B. "x" eingibt, wie bring ich dem Programm bei das Zeichen in ein Binärcode auszugeben?

    Beschäftige mich erst seit ein paar Tagen mit c bzw. Programmieren, daher bitte ich um Verständnis.



  • Ein Ansatz wären zum Beispiel die Bitoperatoren (<< und >>).



  • Ein Byte sind normalerweise 8 Bit (bei ANSI C auch CHAR_BIT), d.h.
    255 == 11111111
    Die niederwertige Hälfte maskiert man mit Bit-And Operator &, also
    11111111
    &
    00001111

    00001111

    in C dann   ergebnis = ausgangswert & 15;
    

    Die höherwertige Hälfte shiftet man am besten mit dem Rechtsshift-Operator >>
    11111111
    1x shift nach rechts
    01111111
    1x shift nach rechts
    00111111
    1x shift nach rechts
    00011111
    1x shift nach rechts
    00001111

    in C dann ergebnis = ausgangswert >> 4;
    


  • Das ist so...nicht ganz korrekt.

    Für vorzeichenlose Integertypen verhält sich der Rechtsshift so, wie Wutz es beschreibt, aber wenn char vorzeichenbehaftet ist - und das kann er durchaus sein - schiebt sich bei gesetztem Vorzeichen auf der linken Seite eine 1 in die Variable, keine 0. Etwa

    10110000 >> 1
    = 11011000
    

    Demenstprechend: Entweder

    (unsigned char) c >> 4
    

    oder

    c >> 4 & 0x0f
    

Log in to reply