【问题标题】:C code - a way to convert 5 to 7 and 7 to 5 without "if"C 代码 - 一种无需“if”即可将 5 转换为 7 和 7 转换为 5 的方法
【发布时间】:2014-04-16 10:54:30
【问题描述】:

我想编写一个获取数字 X 的函数,如果 X=5 则返回 7 ,如果 X=7 则返回 5 ,否则返回其他内容。 有一种简单的方法 - 使用“if”块 另一种方式 - 使用地图(5 映射到 7,7 映射到 5) 第三种方式——写出匹配的线性数学方程 但我正在寻找第 4 种方法(再次 - 根本不使用“if”块)。

感觉需要使用位操作,但我在这方面并不擅长,所以我需要帮助。

有什么想法吗?

谢谢!

【问题讨论】:

  • if 是指ifswitch 和三元运算符(即根本没有任何形式的分支)?
  • 是的。没有如果,没有开关等。

标签: c bit-manipulation low-level low-level-code


【解决方案1】:

如果输入范围有界且很小,则将输入用作结果查找表的索引...

【讨论】:

    【解决方案2】:

    除了明显的按位异或解决方案外,您还可以利用布尔表达式返回 1 或 0 的事实,例如

    int f(int x)
    {
        return (x == 5) * 7 + (x == 7) * 5;
    }
    

    还有其他简单的算术方法,例如

    int f(int x)
    {
        return 12 - x;
    }
    

    【讨论】:

    • 第一个仍然是某种“如果”,但我真的很喜欢 12-X。简单、干净、直接。我应该对此有所保留:=)
    • 第一个实际上通常是无分支的 - 尝试编译它并查看生成的代码。
    【解决方案3】:
    int fun(int p)
    {
        return p^2;
    }
    

    【讨论】:

    • 异或...谢谢:-)
    【解决方案4】:

    我希望这不是我为你做的功课:

    int mysteriousFunction( int x ) {
        return (x ^ 2);
    }
    

    【讨论】:

    • 没关系 - 这不是家庭作业,只是对一个问题给出不同解决方案并以不同方式思考的挑战
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2014-02-27
    相关资源
    最近更新 更多