変数 a と b が 32 ビット整数であると仮定すると、3 項演算子も比較演算子も使用せずに、a < b の場合は 0 を返し、a >= b の場合は 1 を返す方法はありますか?
2 に答える
2
これはできますが、きれいではありません。
問題は、前述のとおり、オーバーフローです。ただし、次のように回避できます。
return ((x - y) ^ ((x ^ y) & ((x - y) ^ x))) >>> 31;
署名済みバージョンの場合、または
return ((~x & y) | ((~x | y) & (x - y))) >>> 31;
無印版用。
Javaの>>>
ように、符号なし右シフトがあります。
それらを使用してx = b, y = a
、機能に一致させます。
これら (およびその他) は、Hacker's Delight の「比較述語」という名前で見つけることができます。
于 2014-02-15T19:50:54.010 に答える