You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Linq对整数按奇偶分组时x&1的逻辑原理是什么

代码运行原理说明

1. x & 1位运算的逻辑

这是二进制按位与运算,用于快速判断整数的奇偶性:

  • 所有整数的二进制表示中,奇数最后一位为1,偶数最后一位为0
  • 任意整数和1做按位与运算时,仅会保留二进制最后一位的数值,其余位都会被置为0:
    • 奇数运算结果固定为1,例如3 & 1 = 1
    • 偶数运算结果固定为0,例如4 & 1 = 0
  • 该运算和取模运算x % 2的奇偶判断效果一致,且执行效率更高;同时不会因为输入负整数出现负余数,得到的分组key只会是0或1,分组结果更统一。这里就是用运算结果作为分组的key,0对应偶数分组,1对应奇数分组。

2. ToLookup方法的作用

你平时常用的常规分组方法一般是GroupBy,二者核心差异如下:

  • GroupBy属于延迟执行方法,每次遍历分组结果时都会重新执行分组逻辑,返回值为IEnumerable<IGrouping<TKey, TElement>>类型
  • ToLookup属于立即执行方法,调用后会立刻完成全部分组计算并将结果缓存到内存中,返回值为ILookup<TKey, TElement>类型,该接口本身实现了IEnumerable<IGrouping<TKey, TElement>>,所以后续调用ToList()就可以匹配方法要求的IList<IGrouping<int, int>>返回值类型。

3. 等效的常规分组写法

用你熟悉的GroupBy也可以实现完全一致的效果,参考代码如下:

public IList<IGrouping<int, int>> GroupEvenAndOddNumbers(int[] numbers)
{
    // 按奇偶分组后转List即可得到和原代码完全一致的返回结果
    return numbers.GroupBy(x => x & 1).ToList();
    // 也可以替换为你更熟悉的取模写法,正整数场景下结果完全一致:
    // return numbers.GroupBy(x => x % 2).ToList();
}

内容的提问来源于stack exchange,提问作者retlok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:33:04