我正在尝试优化一些代码,这看起来很简单,但让我很难过。所以基本上,我试图将一个数字设为 1,如果它大于 0。问题是我不想使用任何比较,因为它们非常昂贵,并且在没有比较的情况下获得解决方案会拯救我40 秒,因为它被调用了很多。所以我想要的只是位操作符,加法、减法、除法和乘法。
额外:这个数字永远只有 1 或 2。
类型是unsigned int。
完整算法:
DWORD num = (blockNum / 0xAA) * blockStep[0];
switch (blockNum / 0xAA)
{
case 0:
return num + hashOffset;
default:
num += ((blockNum / 0x70E4) + 1) << (BYTE)packageSex;
switch (blockNum / 0x70E4)
{
case 0:
return num + hashOffset;
default:
return num + (1 << (BYTE)packageSex) + hashOffset;
}
}