Problem bei Bits



  • Hallo hab ein kleines Problemchen.

    Ich will in einem DWORD dw 2 int-Zahlen (x und y) speichern, sodass ich sie dann später über LOWORD und HIWORD wieder abfragen kann.
    Jetzt hab ich das so gemacht aber irgendwie kommt dann nachher bei HIWORD immer 0 raus:

    dw = y;
    dw = dw << 16;
    dw = dw | x;

    Ich bin leider nicht so der Genie bei direkten Bitmanipulationen (wie man vielleicht merkt) aber mir kann sicher jemand helfen.



  • #define MAKELONG(a, b) \ 
        ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16))
    


  • will nur angemerkt haben dass man vorsichtig bei solchen konstruktionen sein sollte-2int's in 1DWORD. es KANN zu ueberlappungen kommen. ich will jetzt auch nicht weiter drauf eingehen eh man sich am ende noch drum streitet dass int's nicht ueberall 32bit(4byte) gross sind.



  • Vielen Dank für eure Hilfe.
    Habe das Problem jedoch inzwischen selbst gefunden.
    Es lag nicht direkt an dem Code den ich gepostet habe (wusste doch das das stimmt!), sondern ich hab an einer anderen Stelle versehentlich versucht das HIWORD eines 16-Bit-Variable (WORD) zu holen was ja nicht gehen kann 😉

    Hab jetzt einfach generell nur ein WORD benutz und jeweils nur um 8 Bits geshiftet.

    Und was das mit den ints angeht hast du vollkommen recht.
    Vor allem da ich jetzt jedem int nur noch 8 Bits Platz gegeben habe und ein int mind. 16 braucht.
    In meinem Fall ist das jedoch kein so großes Problem, da die beiden ints höchstens den Wert 6 annehmen 😉

    Aber Danke das du mich drauf hingewiesen hast !


Anmelden zum Antworten