您好我正在尝试使用自定义二进制整数除法:来源: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;
}
- 但是我有两个问题:
1)我想将它用于 32 位整数而不是 Int128。所以我假设Int128应该替换为int,并且 (int i = 0; i < 128 ; i++) 应该替换为i < 32; . 正确的?
2) 余数._lo |= 1 -> 这一行在 C# 中根本不起作用。我想这与他们使用的自定义 128 位 int 结构有关,我不知道它是什么意思。有人可以帮我解决这个问题,并翻译它以使其与 int32 一起使用吗?
编辑:只是为了澄清我知道按位运算符的作用,问题部分是: remainder._lo。我不知道这个属性指的是什么,也不确定这一行的用途,以及如何将其转换为 int32?