&运营商的意义是什么?

在以下代码中:

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

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

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

‘&’是按位和运算符 。 &with with 1消除所有其他二进制数字,如果数字是偶数则保留0,如果是奇数则保留1。

这是黑客的做法。 数学家当然会使用模2算术写((i%2)== 1)! 软件工程师会编写!IsEven(i),重用库函数并获得重用布朗尼点… 🙂

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

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

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

在计算机中,这些不是物理开关而是半导体,它们的function称为逻辑门 。 它们与开关做同样的事情 – 对电流或无电流做出反应。

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

这就是为什么:

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

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

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

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

以上内容改编自我写给这个问题的类似答案。

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