0

x > y の場合、この関数は 1 を返し、それ以外の場合は 0 を返します。

これまでのところ私は持っています

int isitGreater(int x, int y) {

     return (((y+((~x)+1)) >> 31) & 1);

しかし、それは機能していません。

許可された操作: 正当な操作: ! 〜&^ | + << >>

X - Y と負の数を取得した場合、それは y > x を意味するため、32 番目のビットは 1 であるため、そのビットを右に 31 回シフトしてから、"そして"それは "1" です。

編集: オーバーフローのため、x が負の場合、これは機能しません。条件ステートメントを使用せずにこのオーバーフローの問題を修正するにはどうすればよいですか?

4

2 に答える 2

3

あなたのコードは私にとってはうまくいきます。有効な質問を送信してください。

編集: x が -2147483648 の場合、 -(-2147483648) (または、同等に ~(-2147483648)+1) がオーバーフローするため、アルゴリズムは正しく機能しません。

于 2012-09-21T04:19:41.353 に答える
1

-2147483648[0x80000000] の 2 の補数を取ることはできません。

于 2012-09-21T04:15:01.063 に答える