条件运算符如何使用按位运算符表示?
这是一个家庭作业问题,我必须仅使用按位运算来实现条件运算符。那就很简单了,如果if
允许使用语句,但它必须是严格的按位运算符。
仅运营商!
, ~
, &
, ^
, |
, +
, >>
, and <<
可以使用。不if
可以使用语句或循环。
该函数采用三个整数,其工作方式与普通条件运算符类似。第一个参数被评估为零或非零。如果第一个参数为零,则返回第二个参数。如果第一个参数非零,则返回第三个参数。
我希望有一个简单的算法可以解决这个问题。任何关于从哪里开始的想法都会有很大的帮助。
是否允许移位作为按位运算符?允许算术运算符吗?
您的编辑并不完全清楚,但我认为您需要实现等效的
a ? b : c
where a
, b
and c
是整数。这又相当于
a != 0 ? b : c
实现这一目标的一种方法是找到一种方法将非零值a
仅使用按位运算符转换为全一位模式。如果我们弄清楚如何做到这一点,那么剩下的事情就很容易了。现在,我并没有立即记得任何可以做到这一点的巧妙技巧(我相信它们确实存在),而且我不确定哪些运算符是允许的,哪些是不允许的,所以现在我只使用类似的东西
a |= a >> 1; a |= a >> 2; a |= a >> 4; a |= a >> 8; a |= a >> 16;
a |= a << 1; a |= a << 2; a |= a << 4; a |= a << 8; a |= a << 16;
对于 32 位整数类型,当(且仅当)原始数据中至少设置了一位a
,上面的结果应该是所有位a
设置为 1。(假设我们正在使用无符号整数,以避免与有符号值移位相关的问题)。我再次确信,必须有一种更聪明的方法来做到这一点。例如:a = !a - 1
,但我不知道是否!
and -
被允许。
一旦我们这样做了,原来的条件运算符就相当于
(a & b) | (~a & c)
Done.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)