8

これは宿題で、ビット単位の演算子のみを使用して、x < y返さなければならないかどうかを判断する関数を考え出す必要があります。私は定数のみを使用することを許可されており、32 ビット整数を想定しています。ループ、キャストなどはありません。1( ! ~ & ^ | + << >> )0 - 0xFF

私が理解したのは、たとえば 4 ビットだけを調べれば、が より小さいx - yかどうかを判断できるということです。であった場合、結果はfor になります。xyx8y91111-1

int lessThan(int x, int y){
    int sub = x + (~y+1); 

私が混乱しているのは、その結果を と比較してx実際に より小さいことを判断する方法ですy

私はこの記事をここで調べています。

しかし、私は問題へのそのアプローチに少し混乱しています。ビットスミアリングを達成するためにシフトを実行しましたが、その結果を使用して値を比較する方法について混乱しています。解決策ではなく、少しのガイダンスと明確さを求めているだけです。それは私の意図ではありません。

4

5 に答える 5

0

これが私の試みでした(結果のコンパイル、x> y、0、x <y、1、x == y、1):

((((x + ~y) >> 31) + 1))^1
于 2013-01-29T17:18:12.900 に答える