C代码 - 一种将5转换为7和7转换为5而无需"if"的方法

Cli*_*ung 1 c bit-manipulation low-level low-level-code

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

感觉我需要使用位操作,但我在这方面不占优势,所以我需要帮助.

有任何想法吗?

谢谢!

Fer*_*eak 8

int fun(int p)
{
    return p^2;
}
Run Code Online (Sandbox Code Playgroud)


Pau*_*l R 5

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

int f(int x)
{
    return (x == 5) * 7 + (x == 7) * 5;
}
Run Code Online (Sandbox Code Playgroud)

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

int f(int x)
{
    return 12 - x;
}
Run Code Online (Sandbox Code Playgroud)