Ausgabe der letzten 8 Bits



  • Hallo,
    fange gerade mit C++ Programmierung an.
    Wie kann man von einem integer-Wert die letzten 8 Bits anzeigen lassen?

    Grüße Jens



  • was denn jetzt? 2 byte(16 bits) oder 8 bits(1byte)?

    int foo = 0x2685;
    cout << foo & 0xFF << endl; // 1 byte -> 8 Bit
    cout << foo & 0xFFFF << endl; // 2byte -> 16 Bit
    


  • Mit bitweisem Und:

    myint & 0xff
    

    P.S.: 8 Bits sind aber meistens 1 Byte, nicht 2.



  • Es soll eine printf Ausgabe der letzten 8 Bit einer unsigned char Variable stattfinden! Irgendwie funzt das mit den Anweisungen nicht!
    Momentan habe ich:
    int(void)main
    {
    unsigned char Byte;
    Byte=0x30;
    }

    Wie kann ich mir die letzten 8 Bit dieses Wertes in einer printf- Ausgabe anzeigen lassen??



  • int(void)main  // total falsch, die klammern gehören hinter das main und das void ist nicht nötig, aber erlaubt
    {
    unsigned char Byte;
    Byte=0x30; // bis auf den fehler oben ist doch schonmal alles korrekt
    }
    

    so, wie du nun etwas ausgibst, solltest du selbst wissen - und wie du an die letzten 1 oder 2 byte kommst haben wir dir schon oben gesagt



  • ein char ist in der Regel 8 Bit groß, also ist es unfug dir die letzten 8 Bit rauszufiltern mit Bitmasken.
    (Hierfür werden mich wahrscheinlich wieder einige Besserwisser zerreißen, weil die zufällig ein System haben, wo das nicht so ist :S)

    desweiteren bist du hier im C++ Unterforum... da benutzt man iostreams und nicht printf 🙄

    aber gut, hier die C Lösung:

    #include <stdio.h>
    
    int main(void)
    {
        char blub = 0x30;
        int n = 7;
        for (; n >= 0; --n)
            printf("%c", ((blub & (1 << n)) ? '1' : '0'));
        printf("\n");
        return 0;
    }
    

    mir ist zumindest kein Formatcode für binäre Ausgabe geläufig...
    Hexadezimal Ausgabe geht mit %x bzw. %X, aber dann kommt nur wieder die 30 raus.

    In C++ könntest du dies tun (leider unterstützt auch C++ standardmäßig nur Oktal, Dezimal und Hexadezimal):

    #include <iostream>
    
    int main(void)
    {
        char blub = 0x30;
        for (int n = 7; n >= 0; --n)
            std::cout << ((blub & (1 << n)) ? '1' : '0');
        std::cout << std::endl;
        return 0;
    }
    

Log in to reply