Was bedeutet die Aussage if (counter & (1<

Lesezeit: 2 Minuten

Benutzeravatar von Sarathi Shah
Sarathi Schah

Ich arbeitete an einem Algorithmus von Untersequenzen.

Was bedeutet die Aussage:

if (counter & (1<<j))

im Rahmen des nachstehenden Programms:

void printSubsequences(int arr[], int n)
{
    unsigned int opsize = pow(2, n);

    for (int counter = 1; counter < opsize; counter++)
    {
        for (int j = 0; j < n; j++)
        {
            if (counter & (1<<j))
                cout << arr[j] << " ";
        }
        cout << endl;
    }
}

  • << bedeutet, dass der linke Operand so oft mit 2 multipliziert wird wie die Zahl im rechten Operanden. Z.B 1 << 3 meint 1*2*2*2.

    – MM

    13. Januar 2017 um 7:42 Uhr

  • Das counter & (stuff) ergibt ein bitweise AND von counter und stuff

    – David C. Rankin

    13. Januar 2017 um 7:45 Uhr

  • Was sind bitweise Verschiebungsoperatoren (bit-shift) und wie funktionieren sie?

    – phuklv

    13. Januar 2017 um 7:47 Uhr

Codors Benutzeravatar
Codor

Die Aussage:

if (counter & (1<<j))

überprüft, ob die j-tes Stück von counter eingestellt ist. Genauer, 1 << j verwendet Verschiebung von 1 um eine Bitmaske zu erzeugen, in der nur die j-te Bit ist gesetzt. Das & Operator maskiert dann die j-ein bisschen counter; wenn das Ergebnis nicht Null ist (was bedeutet, dass die j-tes Stück von counter gesetzt wurde), ist die Bedingung erfüllt.

Betrachten Sie das folgende Beispiel. Wenn counter ist 320, seine binäre Darstellung ist 101000000, was bedeutet, dass das 6. Bit (dasjenige, das dem Wert 64 entspricht) gesetzt ist; Lassen Sie uns für dieses Bit testen. Die Bitmaske wird durch Verschieben erzeugt 1die die binäre Darstellung hat 0000000016 Stellen nach rechts, was den Binärwert ergibt 001000000. Der Wert von counternämlich:

101000000

kombiniert wird mit &das ist der bitweise Und-Operator, mit der Bitmaske wie folgt:

  101000000
& 001000000
  ---------
  001000000

Der Wert 001000000 entspricht wieder dem Wert von 64; Dies ist hier jedoch nicht wichtig, es ist nur wichtig, dass es nicht Null ist (da es ein Nicht-Null-Bit hat, nämlich das Bit, auf das wir prüfen wollten). Insgesamt der Zustand

if ( 64 )

ist befriedigt. In der Semantik von C (das keinen nativen booleschen Datentyp aufweist) wird jeder Wert ungleich Null als wahr behandelt, wenn er überprüft wird if.

  • Können Sie mir bitte Schritt für Schritt die Ausführung geben?

    – Sarathi Schah

    13. Januar 2017 um 8:36 Uhr

  • Die erste Schleife erzeugt alle möglichen Kombinationen und die zweite Schleife druckt entsprechend diesen Kombinationen. @SarathiShah

    – Shinzu

    2. März 2018 um 21:50 Uhr


  • Die Operation x< lshift(110) um 2 Bits – —-> 11000 = 24 in Dezimalzahl.

    – varungupta

    10. Februar 2020 um 4:16 Uhr

  • Kalte Tür? Kuhtür? Nicht sicher.

    – Déjà-vu

    17. Dezember 2022 um 5:16 Uhr

Benutzeravatar von Vrutik Parajapati
Vrutik Parajapati

—Erster For-Schleifenlauf i=0 bis i<8 .(Erklärung - https://www.geeksforgeeks.org/power-set/)

—Zweiter Schleifenlauf i=0 bis i<3 (für {a,b,c})

1. Nehmen wir für die erste Schleife i = 0:

    j=0,1,2 in this case (0 & (1<<0)),(0 & (1<<1)),(0 & (1<<2)) 
    
    But 0 with & is always 0 so all instance are false for first loop.
  1. Nehmen wir für die zweite Schleife i=1:

    j=0 In diesem Fall (1 & (1<<0)) ist es wahr, also j=0 und arr[0]= ein Druck.

    j=1,2 sind falsch, weil ( 1 & (1<<1)) & (1 & (1<<2)) falsch sind.

  2. Nehmen wir für die zweite Schleife i=2:

    j=1, in diesem Fall (2 & (1<<1)) ist es wahr, also j=1 und arr[1]= b drucken.

    j=0,2 sind falsch, weil ( 2 & (1<<0)) & (2 & (1<<2)) falsch sind.

  3. Nehmen wir für die zweite Schleife i=3:

    j=0,2 int diesem Fall (3 & (1<<2)) & (3 & (1<<2)) es ist wahr also j=0,2 und arr[2] =a & c drucken.

    j=1 sind falsch, weil ( 3 & (1<<1)) falsch sind.

  4. Nehmen wir für die zweite Schleife i=4:

    j=2 In diesem Fall (4 & (1<<2)) ist es wahr, also j=2 und arr[2] =c drucken.

    j=0,1 sind falsch, weil ( 4 & (1<<0)) & (4 & (1<<1)) falsch sind.

Das geht also weiter…..

1437410cookie-checkWas bedeutet die Aussage if (counter & (1<

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy