コミュニティ、右シフトの2つの要因を見つける
範囲はInt32.MinValue - Int32.MaxValueの範囲であるとします。 右のシフト演算子を使って一緒に計算したときに、この整数になる2つの数を見つけたいと思います。
例:いくつかのnegativ値に対するただし
private static int[] DetermineShr(int input)
{
int[] arr = new int[2];
if (input == 0)
{
arr[0] = 0;
arr[1] = 0;
return arr;
}
int a = (int)Math.Log(int.MaxValue/Math.Abs(input), 2);
int b = (int)(input * Math.Pow(2, a));
arr[0] = a;
arr[1] = b;
return arr;
}
:
入力値がここ2022703104 >> 14 == 123456
は私の試みですので123456
2の可能な出力値は、2022703104
と14
可能性がある場合それが機能しない場合、出力は正しい計算にはなりません。
そして、このような-2147483648
のような非常に小さな入力値の例外を投げる:
それはInt32.MinValue
とInt32.MaxValue
の間のすべての入力値の有効な出力を生成しますので、どのように私は私の機能を変更することができますか?
として処理した場合、あなたはあまりに2147483648でオーバーフローを取得する必要があります... –
あなたは何を「2の補数」の手段を研究しているしていますか? –