我想知道 C# for Programmers 2010 中有一段代码,这里是:
for (int i = 0; i < deck.Length; i++)
{
deck[i] = new Card(faces[i % 13], suits[i / 13] );
}
我知道计数是数组内存中的插槽,新卡将花色和面放在甲板上,它们会返回计数值。我不明白的是你怎么能模数除以零?还是我误会了?谢谢
这个问题听起来模数运算符让您感到困惑。模数 ( %
) 运算符计算除法的余数。它的结构与除法(分子/分母)相同。看来您看到i % 13
的是remainder of 13/i
。那是错的。它是remainder of i/13
。因此,如果i
为零,则模运算符将返回 0。您永远不会在该应用程序中除以我的零。
一个例子是3/2
。3/2
是1个半。但是,如果您将该结果保存为整数(无小数),则仅1
保存。那一半去哪儿了?它被扔掉了。如果你想要它,你可以将它保存为float
or double
,或者使用模数运算符。3%2
会给你1
,剩下的。这是一个示例程序:
struct ModulusHelper
{
public int Quotient;
public int Remainder;
public ModulusHelper(int numerator, int denominator)
{
Quotient = numerator / denominator;
Remainder = numerator % denominator;
}
}
你可以像这样使用它:
class Program
{
static void Main(string[] args)
{
ModulusHelper mod = new ModulusHelper(args[0], args[1]);
Console.WriteLine("Quotient: {0}", mod.Quotient);
Console.WriteLine("Remainder: {0}", mod.Remainder);
Console.ReadKey(); // BATCH `pause`
}
}
0 % 13 = 0
0 / 13 = 0
这是简单的数学。
您不是除以 0,而是将 0 除以 13。0/13 = 0