shift mit Rotation



  • Hi!

    kann jemand mir weiter helfen?

    int main()
    {
    char E=0x11;

    char A=0x00;
    char tmp=0x00;
    char Test=0x00;

    A= E ^ 0xD3;

    printf("\nPIN (low) xor D3: %x \n\n", A);

    tmp = A << 2;
    printf("\ntmp (low): %u \n", (int)tmp);

    printf("\nA: %x \n\n", A);

    Test =A >> 6; // ich kriege hier immer falsche ergebnisse
    // und zwar anstatt 3 kriege ich immer ffffffff 😞
    // weiss jemand warum? Danke!

    printf("\nTest: %x \n", Test);

    A |= tmp;

    printf("\nA: %x \n", A);

    return 0;
    }



  • Der Grund liegt im Datentyp der Variablen.

    char ist meistens 8 bit gross
    und
    int 16 bit

    Der Befehl

    tmp = A << 2;

    hat als Ergebnis die Binärzahl

    1100001000

    Diese hat aber 10 Stellen, also 10 bit.

    Das passt nicht in das 8 bit große char hinein,
    weshalb die meisten Compiler und Systeme
    einfach nur die ersten 8 bit (Stellen) von rechts nehmen.

    Deshalb wird bei char tmp zu 00001000 was 0x8 entspricht.
    D.h. die beiden Einsen ganz links werden einfach abgeschnitten.

    Nimmt man den Datentyp int, ist genug Platz und
    tmp wird zu 0x308

    Ersetze also das char durch int



  • Hallo DDuelec,

    das stimmt, das liegt an meine Variable deklaration.

    Dankeschoen!

    Gruss

    Phuoc


Anmelden zum Antworten