我正在做一個家庭作業,我們應該做一個叫做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