题目描述:
/**conditional- 条件表达式 x?y:z*例子:conditional (2,4,5)=4,*合法运算符号:!~&^|+<<>>*/int conditional (int x,int y, int z){/**************/return/******/;}
首先来看什么是三目运算,他的格式如下:
condition ? result1 : result2 (条件?返回值1:返回值2)
如果条件condition为真true,整个表达式将返回result1,否则将返回result。
8 == 6 ? 2 : 1 返回1,因为8不等于6.
5 > 3 ? 3 :4 返回3,因为5大于3.
1 ? 4 : 5 返回4,因为1不等于0.
0 ? 4 : 5 返回5,因为conditon为0.
最终位运算代码如下:
代码分析:
构造一个数f方便选择输出,f=~(!x)+1
当x=0时,!x=1,取1的反为1111……1110,加1后f的每一位都为1
当x!=0时,!x=0,取0的反为1111……1111,加1后f的每一位都为0(溢出)
最终目的:x!=0时输出y,x=0时输出z ,而正整数&0=0 ,正整数&1=正整数
所以最终应该当x!=0时输出(y&1)+(z&0),当x=0时输出(y&0)+(z&1)
x!=0时即f的每一位为0 (y&1)+(z&0) = (y&~f)+(z&f)
x=0时同理可得。