int << 16?



  • also ich lese mich gerade durch ein Sourcecode durch und bin auf das gestoßen...

    int x;
    
    x << 16;
    

    Was bedeutet das?





  • Ohne x zu initialisieren ist das fast wie ein simpler Zufallsgenerator... 😉



  • _matze schrieb:

    Ohne x zu initialisieren ist das fast wie ein simpler Zufallsgenerator... 😉

    Ohne den Wert jemandem zuzuweisen aber ein nutzloser 😉



  • _matze schrieb:

    Ohne x zu initialisieren ist das fast wie ein simpler Zufallsgenerator... 😉

    Vrmtl. wird dir aber jede IDE an den Kopf werfen, dass der Wert nicht initialisiert wurde und trotzdem von ihm gelesen wird - dazu kommt noch, dass im Debug-Mode Variablen meist trotzdem initialisiert werden (MSVC nimmt glaub ich 0xcccccccc ) und du damit nur im Release-Mode "Zufalls"-Zahlen hättest...

    bb



  • Ich möchte nochmal darauf hinweisen, dass << und >> , genauso wie & , | , und ^ , sich direkt auf die Bitmuster beziehen und dass die Bitmuster-Repräsentierung für vorzeichenbehaftete Ganzzahlen entweder 2er-Komplement, 1er-Komplement oder Sign+Magnitude sein kann. Das heißt, "<< 16" entspricht bei vorzeichenlosen Ganzzahlen und beim so populären 2er-Komplement einer Multiplikation mit 65536.

    (-1 << 2) == -4 (2er Komplement)
    (-1 << 2) == 4 (Sign+Magnitude)
    (-1 << 2) == -7 (1er Komplement)

    Praktisch relevant ist aber wahrscheinlich nur noch der 2er-Komplement-Fall, außer, man hat mit relativ alten und/oder exotischen Rechnern zu tun.

    Die Existenz der "exact width"-C99-typedefs für Ganzzahlen (int32_t, ... siehe <stdint.h> und bald auch <cstdint> im kommenden C++ Standard) garantiert übrigens, dass das 2er-Komplement für diese Typen verwendet wird.

    Gruß,
    SP


Log in to reply