计算机系统基础实验——数据的机器级表示(条件表达式 x?y:z)

题目描述:

/*
*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时同理可得。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值