如何重写这个if-else语句,以便它不使用跳转?

gru*_*czy 4 c if-statement

我不是要优化任何东西,所以请不要告诉我,过早的优化是万恶之源.我试图解决一个问题,我找不到第三个解决方案.

问题是这样的:

if (x)
    y = a;
else
    y = b;
Run Code Online (Sandbox Code Playgroud)

x只能是0或1.如何在没有跳跃的情况写出这个条件

一种具有数据结构的解决方案是:

int temp[2] = {b, a};
y = temp[x];
Run Code Online (Sandbox Code Playgroud)

另一种算术解决方案是

y = x * a + (1 - x) * b;
Run Code Online (Sandbox Code Playgroud)

应该有第三个,一个逻辑解决方案.你知道它的样子吗?请用C解决.

650*_*502 9

y = a ^ ((x - 1U) & (a ^ b));
Run Code Online (Sandbox Code Playgroud)

这使用按位x或