こんにちは、カスタムのバイナリ整数除算方法を使用しようとしています: ソース: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=642
public static void DivMod (Int128 dividend, Int128 divisor, out Int128 quotient, out Int128 remainder)
{
// Determine the sign of the results and make the operands positive.
int remainderSign = 1;
int quotientSign = 1;
if (dividend < 0)
{
dividend = -dividend;
remainderSign = -1;
}
if (divisor < 0)
{
divisor = -divisor;
quotientSign = -1;
}
quotientSign *= remainderSign;
quotient = dividend;
remainder = 0;
for (int i = 0; i < 128; i++)
{
// Left shift Remainder:Quotient by 1
remainder <<= 1;
if (quotient < 0)
remainder._lo |= 1;
quotient <<= 1;
if (remainder >= divisor)
{
remainder -= divisor;
quotient++;
}
}
// Adjust sign of the results.
quotient *= quotientSign;
remainder *= remainderSign;
}
- ただし、2 つの問題があります。
1) Int128 ではなく 32 ビット整数に使用したいと思います。したがって、Int128をintに置き換え、 (int i = 0; i < 128 ; i++) をi < 32;に置き換える必要があると想定しています。. 正しい?
2) 残り._lo |= 1 -> この行は C# ではまったく機能しません。彼らが使用するカスタム 128 ビット int 構造体に関係していると思いますが、それが何を意味するのかわかりません。誰かがこれを手伝ってくれて、int32 で動作するように翻訳できますか?
編集:ビットごとの演算子が何をするかを明確にするために、問題の部分は次のとおり です。このプロパティが何を指しているのかわかりません。また、この行の目的や、int32 にどのように変換されるのかもわかりません。