C#如何评估数组循环布尔等价?

时间:2018-04-17 20:15:46

标签: c# boolean bitwise-operators boolean-expression

我试图找出为什么在下面的方法中,数组'8'中的最后一个值将满足“(8& 7)== 0”的where子句。

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 + " ");
      } 
}

它包含在招聘技能测试中,对于我的生活,我无法弄清楚为什么选择该值。无论哪种方式,我都不会在我的测试中使用它,但我很好奇,因为我以前从未碰过这个。

1 个答案:

答案 0 :(得分:2)

所以单个&是一个按位运算符。它正在查看这些数字的二进制表示。

7 = 0111且8 = 1000

当你将它们组合时,你得到0.

这就是你的方法打印出9。

的原因