&的含义是什么?运营商?

时间:2009-03-15 09:10:36

标签: c# .net linq operators

在以下代码中:

Expression<Func<int, bool>> isOdd = i => (i & 1) == 1;

...... (i & 1) == 1是什么意思?

4 个答案:

答案 0 :(得分:12)

Bitwise AND。在这种情况下,检查i中的最后一位是否已设置。如果是,则它必须是奇数,因为最后一位代表1而所有其他位代表偶数。

答案 1 :(得分:4)

'&安培;'是bitwise and operator。 &amp;'with 1消除所有其他二进制数字,如果数字是偶数则保留0,如果是奇数则保留1。

这是黑客的做法。数学家当然会使用modulo 2 arithmetic来写((i%2)== 1)!软件工程师会编写!IsEven(i),重用库函数并获得重用布朗尼点......: - )

现在,这些是否更有效取决于编译器和CLR - 在这种情况下,还取决于谁来处理LINQ表达式树,以及接收者准备处理什么。

答案 2 :(得分:4)

&安培;是一个按位AND运算符,AND是二进制系统中的基本运算之一。

AND表示'如果A和B都打开'。现实世界的例子是两个串联的开关。只有当两者都允许电流通过时,电流才会通过。

在计算机中,这些不是物理开关,而是半导体,它们的功能称为logic gates。它们与开关做同样的事情 - 对电流或无电流做出反应。

当应用于整数时,一个数字中的每个位与另一个数字中的每个位组合。因此,要理解按位运算符AND,需要将数字转换为二进制,然后对每对匹配位执行AND运算。

这就是为什么:

00011011 (odd number)
AND
00000001 (& 1)
== 
00000001 (results in 1)

尽管

00011010 (even number)
AND
00000001 (& 1)
==
00000000 (results in 0)

因此,(&amp; 1)操作使用AND逻辑将最右边的位与1进行比较。所有其他位都被有效忽略,因为任何东西都没有任何东西。

这相当于检查数字是否为奇数(所有奇数的最右位都等于1)。

以上内容改编自我写给this question的类似答案。

答案 3 :(得分:2)

即检查最后一位是否打开(这使得它变为奇数)。请注意,这不是专门针对linq的,您可以在sql或c#代码上执行此操作。