a と b の 2 つの 10 進数値があります。ビット演算子を使用して 2 つの値が同じ符号かどうかを確認するにはどうすればよいですか?
1775 次
5 に答える
10
使用できますMath.Sign()
。を使用すると、が負Math.Sign(x)
の場合は、それが正の場合はelseを返します。そう :x
-1
1
0
0
if(Math.Sign(a) == Math.Sign(b))
{
// Code when sign matched.
}
else
{
// Code when sign not matched.
}
于 2013-06-24T09:16:19.353 に答える
0
達成したい符号チェックにはビット単位のシフトが必要です。
if ( ( number >> sizeof(byte) * sizeof(numberType) -1 ) & 1)
{ /* < 0 */ }
else
{ /* >= 0 */ }
// you can of course use magic numbers
// example for int: if ( ( number >> 31 ) & 1) { /* < 0 */ }
問題は、 a をビットシフトできないことですdecimal
。次のようにする必要があります。
var shiftableNumber = Int.Parse(Math.Truncate(yourDecimal));
検証はできませんが、ビットごとの演算子による最適化の目的に反するのではないかと思います。ビルトインMath.Sign()
を直接使用することもできます。
于 2013-06-24T11:44:56.220 に答える