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

StringBuilder内部方法中& ~1位运算符语法含义解析

StringBuilder中& ~1位运算符的含义解析

先看原方法的代码实现:

private int GetReplaceBufferCapacity(int requiredCapacity)
{
    // 该方法假设所需容量小于StringBuilder的最大容量
    Diagnostics.Debug.Assert(requiredCapacity <= m_MaxCapacity);

    int newCapacity = Capacity;
    // 将当前容量向上取整到大于所需容量的最近2的倍数
    if (newCapacity < requiredCapacity)
    {
        newCapacity = (requiredCapacity + 1) & ~1;
    }
    return newCapacity;
}

& ~1的具体含义

拆解来看:

  1. ~1(按位取反):以32位整数为例,1的二进制是00000000 00000000 00000000 00000001,按位取反后会变成11111111 11111111 11111111 11111110——也就是除最低位为0,其余所有位都是1的数值。
  2. &(按位与):当一个数值和上述取反结果做按位与时,会把该数值的最低二进制位强制置为0,最终得到一个偶数(偶数的二进制最低位始终是0)。

结合代码里的(requiredCapacity + 1) & ~1,整体作用是把requiredCapacity向上取整到不小于它的最小2的倍数,举几个实际例子:

  • 若requiredCapacity是5(奇数):5+1=6,6 & ~1结果为6,是不小于5的最小2的倍数;
  • 若requiredCapacity是6(偶数):6+1=7,7 & ~1结果为6,刚好等于自身(本身就是2的倍数);
  • 若requiredCapacity是7(奇数):7+1=8,8 & ~1结果为8,是不小于7的最小2的倍数。

补充说明

根据微软官方对C#位运算符的定义:

  • 按位取反运算符~会反转操作数的每一位;
  • 按位与运算符&仅当两个操作数的对应位都为1时,结果的该位才为1,否则为0。

这也是& ~1能实现“转偶数”逻辑的底层依据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:40:19