我正在做一个家庭作业,我们应该做一个叫做isGreater(x,y)的函数,如果x大于y,它会返回,但是我们只能和+和!一起使用按位运算符。我已经解决了这个问题,如果x和y具有不同的符号,则使用规则,那么x> = 0和y < 0或者如果x和y具有相同的符号,那么只有y-x为负数。为什么这个功能比功能更好?
但是,当我在寻找其他人如何解决它时,我注意到以下方法,无论出于何种原因都能正确工作。
y = ~y;
return !(((x&y) + ((x^y) >> 1)) >> 31);
我不能为我的生命明白为什么这个工程,我想这已经是与X中的第一位未在Y或设置的东西?
注意:显然这只是一个有效的解决方案,如果x和y是int,而不是unsigned int。
这是允许的,随着!运营商。该解决方案非常有效。 – jamiees2 2014-09-10 21:46:57
对不起,我犯了一个错误,不包括+和!运营商。 – jamiees2 2014-09-10 21:53:16
如果我没有弄错,如果x是1且y是1,则返回1.那么函数应该是'isGreaterOrEqual(x,y)'? – indiv 2014-09-10 21:55:03