インタビューの質問16.07。最大値

int maximum(int a, int b)
{
	long k = (((long)a - (long)b) >> 63) & 1;//取符号位
	return b * k + a * (k ^ 1);
}

アイデア:

二つの問題は、1は符号ビットのint型のうち、他はint型以上行う方法である方法です。

あなたは長い間見てか、int型の必要があります。符号ビットは、長い63の右の種類は、あなたが得ることができることを、最初の場所です。

一つのこと、高ビット0は正の数を残したが、高ビットマイナス1(知識のコンパイルを)左

return b * k + a * (k ^ 1)

アウトkは符号ビット、1 0は正の数であり、負です。Bが大きく、B負説明1つの+ A 0 Bは適切ではありません。、正の大きいことを示す場合、逆に、そのB 0 + 1は、Aに相当します。

ここでは非常に感謝滞在ボタンユーザーリップルを感謝します。

公開された175元の記事 ウォンの賞賛9 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_43461641/article/details/104639800