Problem mit logischem Ausdruck!
-
Hi Leute,;)
ich hab ein Codesnippet gefunden das sich mit dem finden und anzeigen von logischen Laufwerken, deren Art, Kapazität, Seiennummer usw. beschäftigt.
Der Code ist gut zu verstehen nur eine Sache macht mir Probleme:
UINT nDrive; DWORD dwLogicalDrives = GetLogicalDrives(); for ( nDrive = 0; nDrive < 32; nDrive++ ) { if ( dwLogicalDrives & (1<<nDrive)) // <--- :confused::confused::confused: { cout << char(nDrive + 65) << endl; } }Genauer gesagt diesen logischen Ausdruck
(1<<nDrive))
verstehe ich nicht.
Könntet Ihr mir den erklären, bzw. kann ich diesen Ausdruck durch einen anderen logischen (einfacheren) Ausduck ersetzen ?Vielen Dank für eure Mühe und Hilfe vorab
ShadowEater
-
Das ist ein Linksshift (http://de.wikipedia.org/wiki/Bitweiser_Operator#Logische_Verschiebung).
1 << n bedeutet, dass du die 1 um n Stellen nach links verschiebst (also für n = 2 wäre das dann 100) (natürlich alles binär betrachtet).
a << n ist dasselbe wie a * 2n.
dwLogicalDrives & (1<<nDrive)hiermit machst du quasi nichts anderes, als alle Bits in dwLogicalDrives außer dem nDrive-ten auszublenden (von hinten aus betrachtet).
mfg
-
Danke Bloops für die schnelle Antwort.:)
Dann werd ich mal die Bitshifts genauer betrachten!Kann man die Zeile
if ( dwLogicalDrives & (1<<nDrive))auch anders schreiben, ohne den Bitshift?

Btw. danke für den Link, der ist klasse

Danke für Deine\Eure Hilfe

Gruß
ShadowEater
-
Verstehst du denn was da passiert?
Natürlich kann man das anders schreiben, aber verstehen wirst du es dann immer noch nicht.In 8 Bit Darstellung.
Dezimal 03 -> Binär 00000011
2mal links verschoben (rechts werden Nullen eingefügt), ergibt
Dezimal 12 -> Binär 000011003 * 2hoch2 == 3 * 4 = 12
Dieser (&) Operator ist die bitweise UND-Verknüpfung.
1 UND 1 = 1 , alle anderen = 0
Dezimal 05 -> Binär 00000101
Dezimal 20 -> Binär 00010100
------------------------ 00000100
gleich Dezimal 4Wenn du das verstanden hast kannst du es auch umschreiben.
-
O.k: ubf,
ich setz mich heut Abend dran.

Und danke für die schnelle Antwort !Gruß
ShadowEater
-
(ganzeZahl & (1<<n)) ergibt genau dann true, falls das n'te Bit von ganzeZahl gesetzt ist. Wobei du bei 0 und links anfangen musst zu zählen.