Bitweise Operator << resp >>, wie funktioniert es?



  • Hallo,

    könnte mir bitte jemand detailliert erklären was es genau in den beiden Methoden passiert? 😞 Es wird ein integer Wert in eine Byte Array ab der Position off geschrieben(resp. ausgelesen). Ich verstehe aber nicht ganz was das innere der Methode bedeutet. Könnte es jemand mit einem Beispiel zb. int Nummer 158 erklären?

    void ByteBufferUtils::pushInt(array<System::Byte>^ b, int off, int val) {
            b[off    ] = System::Byte (0xff & (val >> 3));
            b[off + 1] = System::Byte (0xff & (val >> 2));
            b[off + 2] = System::Byte (0xff & (val >> 1));
            b[off + 3] = System::Byte (0xff & val);
        }
    
    int ByteBufferUtils::popInt(array<System::Byte>^ b, int off) {
            return (((0xff & b[off]) << 3) | 
                    ((0xff & b[off+1]) << 2) |
                    ((0xff & b[off+2]) << 1) |
                     (0xff & b[off+3]));
        }
    

    Danke Joe



  • Ich behaupte mal, dass das so gar nicht funktioniert
    (jedenfalls nicht für Werte über 2047).
    Der Wert muss um 8, 16 und 24 Bit (und nicht
    wie angegeben um 1, 2, 3 Bit) verschoben werden.

    val >> 8 heißt dann soviel wie "verschiebe alle Bits um 8 nach rechts"

    also z.B. (binär)

    11110000 11001100 10101010 00001111b >> 8
    = 00000000 11110000 11001100 10101010b
    

    "& 0xff" wählt dann die kleinsten 8 Bit aus
    0xff = 11111111b

    00000000 11110000 11001100 10101010b& 0xff
    = 00000000 00000000 00000000 10101010b
    

    Da 158 < 256 ist, ist das Ergebnis von 158 >> 8 Null.

    Alex


Anmelden zum Antworten