kap*_*dit -2 c bit-manipulation ternary-operator
我想在不使用if else语句的情况下实现三元运算符。需要使用按位运算符而不使用三元运算符和if else语句来实现。
a= true --> res = b
a= false --> res = c
Run Code Online (Sandbox Code Playgroud)
您可能意味着您想要无分支的源代码。注意,当源代码中没有分支时,编译器可以自由地在程序集中引入分支,反之亦然。
不过,您仍然可以编写(!a) * c + (!!a) * b。为此表达式生成的程序集可能是也可能不是无分支的。MY编译器为其生成的代码恰好是无分支的(将CMOV指令视为无分支):
〜$猫FC
int f(int a,int b,int c){
返回(!a)* c +(!! a)* b;
}
〜$ gcc -O -S fc && cat fs
…
testl%edi,%edi
塞特纳尔
movzbl%al,%eax
cmovel%edi,%esi
orl $ -2,%eax
包括%eax
和%edx,%eax
地址%esi,%eax
popq%rbp
退回
.cfi_endproc