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

如何优化基于8位无符号整数的布尔计算函数以提升速度?

位运算优化需求与实现

问题定义

输入两个8位无符号整数a、b,输出仅为-1或1,运算规则如下:

  • 步骤1:通过异或消除共位,计算 aANb = a & (a ^ b)、bANa = b & (a ^ b);
  • 步骤2:统计bANa中每一个1位右侧(含当前位)aANb的1位数量,将这些数量求和;
  • 步骤3:若总和为偶数返回1,奇数则返回-1。

示例

当a=173、b=154时:

  • a二进制:10101101
  • b二进制:10011010
  • 计算得aANb=00100101,bANa=00010010
  • 求和结果为3(奇数),返回-1

当前C#实现代码

int a = 173;
int b = 154;
int sum = 0;
int aANb = 0;
int bANa = 0;
for (int i = 0; i < 8; i++)
{
    aANb = a & (a ^ b);
    bANa = b & (a ^ b);

    if ((bANa >> i) % 2 == 1)
    {
        for (int j = i; j < 8; j++)
        {
            sum += (aANb >> j) % 2;
        }
    }
}
int[] answer = { 1, -1 };
string result = $"a={a}\n" +
                $"b={b}\n" +
                $"binary a={Convert.ToString(a, 2).PadLeft(8, '0')}\n" +
                $"binary b={Convert.ToString(b, 2).PadLeft(8, '0')}\n" +
                $"    aANb={Convert.ToString(aANb,2).PadLeft(8, '0')}\n" +
                $"    bANa={Convert.ToString(bANa,2).PadLeft(8, '0')}\n" +
                $"sum={sum}\n" +
                $"result={answer[sum % 2]}";
System.Console.WriteLine(result);

代码输出

a=173
b=154
binary a=10101101
binary b=10011010
    aANb=00100101
    bANa=00010010
sum=3
result=-1
>>>result=-1

优化需求

目标平台为x86,因需开源无法确定具体CPU型号,希望优化函数运行速度。注意到aANb中连续成对的1位不会改变结果,考虑将位串分解为小块并采用查表法优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:54:20