/ / Wie wertet C # eine Array-Schleifen-Boolesche Gleichheit aus? - c #, boolesche, bitweise Operatoren, boolescher Ausdruck

Wie wertet C # ein boolesches Gleichgewicht einer Arrayschleife aus? - c #, boolean, bitweise Operatoren, boolescher Ausdruck

Ich versuche herauszufinden, warum in der folgenden Methode der letzte Wert im Array "8" die where-Klausel von "(8 & 7) == 0" erfüllen würde.

public class Test {
public static void Main() {
int[] Arr = {-3, -1, 0, 1, 3, 8};
var s = from x in Arr where (x & (x-1)) == 0 select x+1;
foreach (int x in s)
Console.Write(x + " ");
}
}

Es ist in einem Einstellungstest enthaltenfür das Leben von mir kann ich nicht herausfinden, warum dieser Wert ausgewählt wird. So oder so werde ich ihn bei meinen Tests nicht verwenden, aber ich bin neugierig, da ich noch nie zuvor darauf gestoßen bin.

Antworten:

2 für die Antwort № 1

Also eine Single & ist ein bitweiser Operator. Es geht um die Binärdarstellung dieser Zahlen.

7 = 0111 und 8 = 1000

Wenn Sie sie kombinieren, erhalten Sie 0.

Deshalb gibt Ihre Methode eine 9 aus.