【发布时间】:2014-11-04 16:30:11
【问题描述】:
我正在做一个家庭作业,我们应该创建一个名为 isGreater(x,y) 的函数,如果 x 大于 y,它会返回,但我们只能将位运算符与 + 和 ! 一起使用。我已经解决了这个问题,使用规则如果 x 和 y 有不同的符号,那么 x >= 0 和 y
但是,当我环顾其他人如何解决它时,我注意到以下方法无论出于何种原因都能正常工作。
y = ~y;
return !(((x&y) + ((x^y) >> 1)) >> 31);
我一生都无法理解为什么会这样,我认为这与 x 中未设置在 y 中的第一位有关吗?
注意:显然,如果 x 和 y 是整数,而不是无符号整数,这只是一个有效的解决方案。
【问题讨论】:
-
这是允许的,还有 !操作员。该解决方案完全有效。
-
对不起,我犯了一个错误,没有包括 + 和 !运营商。
-
如果我没记错的话,如果 x 为 1,y 为 1,则返回 1。那么函数应该是
isGreaterOrEqual(x,y)? -
不,这很奇怪,我也这么认为,但如果 x 为 1 且 y 为 1,则返回 0。
-
不,它没有:ideone.com/FPpMKh
标签: c logic bit-manipulation