Prüfen, ob MSB gesetzt ist



  • Hi,

    die Funktion GetAsyncKeyState liefert einen Wert vom Typ SHORT. Wenn das most significant bit (MSB) gesetzt ist, bedeutet das, dass die abgefragte Taste gedrückt ist. Andernfalls ist sie es nicht. Wie kann ich nun rausfinden, ob besagtes MSB gesetzt ist? Mein Ansatz war:

    if (keyPressed >> (sizeof(SHORT) * 8 - 1))
    {
        // gedrückt
    }
    

    Allerdings ist ein Byte ja nicht immer 8 bit groß. Gibt es eine Variable aus einer Header-Datei, in der die 8 (oder bei anderen Prozessoren eben eine andere Zahl) enthalten ist? Oder macht man das ganz anders?



  • Unter Windows hat ein SHORT immer 16 bit:

    if (keyPressed & (1 << 15))
    

    bzw besser:

    static SHORT const AsyncKeyState_IsPressed = 1 << 15;
    
    ...
    
    if (keyPressed & AsyncKeyState_IsPressed)
    


  • hustbaer schrieb:

    Unter Windows hat ein SHORT immer 16 bit

    Das deckt sich mit dieser Seite. Allerdings steht da auch:

    This type is declared in WinNT.h as follows:
    
    typedef short SHORT;
    

    Und hier steht:

    short
    
    Type short int (or simply short) is an integral type that is larger than or equal to the size of type char, and shorter than or equal to the size of type int.
    

    sizeof(short) kann also auch sizeof(char) sein, was wiederum meines Wissens nach mindestens 8 ist. Widerspricht sich das dann nicht?



  • if (keyPressed < 0)
    


  • Mr.Long schrieb:

    if (keyPressed < 0)
    

    Würde aber auf Systemen, bei denen das MSB nicht das Vorzeichen angibt, nicht funktionieren, oder?



  • Widersprecher schrieb:

    Widerspricht sich das dann nicht?

    Nö.
    Der C++ Standard erlaubt short 16 ... X Bit.
    Windows fordert short == SHORT == 16 Bit (und BYTE == 8 Bit uvm.).
    Somit ist eine standardkonforme C++ Implementierung unter Windows möglich.

    Ich sehe keinen Widerspruch.


Anmelden zum Antworten