c - 如果大于 0,则将数字设为 1

标签 c math optimization

<分区>

我正在尝试优化一些代码,这看起来很简单,但让我很难过。 所以基本上,如果数字大于 0,我会尝试将其设为 1。问题是我不想使用任何比较,因为它们非常昂贵,并且在没有比较的情况下获得解决方案将节省我 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;
                }
        }

最佳答案

此代码片段可产生您想要的效果。我检查了程序集输出 (MSVC++ 2010),它是无分支的。

n = !!n;

关于c - 如果大于 0,则将数字设为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706346/

相关文章:

c - 为什么我会收到有关此代码示例的警告?什么是适当的?

c - 在 C 中将数据读入数组时出错

math - 帮助辛积分器

haskell - 使用 haskell 投影 euler 25 的缓慢解决方案

c - spoj 的时间限制超出错误。我如何改进我的解决方案?

c - 重新分配一个字符串数组

mysql - 如何让 MySQL 识别自定义列名?

python - 测量 float 列表的波动性或稳定性

c++ - 删除字符串中具有相同值的任何相邻字母的 “pair”

java - 限制模拟 CPU 速度的方法