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 00001100

    3 * 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 4

    Wenn 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.


Anmelden zum Antworten