int << 16?
-
also ich lese mich gerade durch ein Sourcecode durch und bin auf das gestoßen...
int x; x << 16;
Was bedeutet das?
-
Sie haben einmal Wikipedia bestellt. Bitteschön:
http://de.wikipedia.org/wiki/Bitweiser_Operator#Verschiebeoperatoren_in_C.2C_C.2B.2B_und_Java
-
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