Bitweise Weniger als oder Gleich

Scheint es eine Art von Missverständnis, dass dies ist für einen Wettbewerb.
Ich bin versuchen zu arbeiten, durch eine Aufgabe und ich habe fest auf eine Stunde jetzt.

 /*
     * isLessOrEqual - if x <= y  then return 1, else return 0 
     *   Example: isLessOrEqual(4,5) = 1.
     *   Legal ops: ! ~ & ^ | + << >>
     *   Max ops: 24
     *   Rating: 3
     */
    int isLessOrEqual(int x, int y)
    {
        int greater = (x + (~y + 1))>>31 & 1;
        return !(greater)|(!(x^y));

    }

Ich bin nur in der Lage, um verwenden von bit-Operatoren, wie angewiesen in die Kommentare.
Ich kann nicht herausfinden, wie zu lösen x <= y;

Mein Gedanke ist, dass ich einstellen kann x als seine zwei-Komplement (~x +1) und fügen Sie es mit Y. Wenn es negativ ist, X größer ist als Y. Daher, durch die Negation, die ich bekommen kann den gegenteiligen Effekt.

Ähnlich, ich weiß, dass !(x^y) entspricht x==y.
Allerdings
dabei !(greater)|(!(x^y)) nicht wieder den korrekten Wert.

Wo bin ich Durcheinander? Ich fühle mich wie ich ' m fehlt ein kleines bisschen Logik.

  • Was bedeutet dies ist ein online-Wettbewerb... ich bin stecken, an einer Aufgabe und ich weiß nicht, wo sich zu bewegen von hier aus.
  • Wähler zu Schließen: diese Frage ist zu breit? Scheint ziemlich gut definiert zu mir.
InformationsquelleAutor | 2017-01-31
Schreibe einen Kommentar