模数运算符的语义是什么?

时间:2012-07-12 00:07:52

标签: c# arrays

在C#for Programmers 2010中有一段我想知道的代码,这里是:

for (int i = 0; i < deck.Length; i++)
{
    deck[i] = new Card(faces[i % 13], suits[i / 13] );
}

据我所知,count是数组内存中的插槽,而新卡正在将套装和面孔放入卡组中并返回计数金额。我不明白的是你怎么能模数并分成零?还是我误会了?感谢

3 个答案:

答案 0 :(得分:4)

这个问题听起来像模数运算符让你感到困惑。模数(%)运算符计算除法的余数。它的结构与除法(分子/分母)相同。您似乎将i % 13视为remainder of 13/i。那是错的。它是remainder of i/13。因此,如果i为零,则模数运算符将返回0.您 从不 将我的零除以 < / strong>申请。

一个例子是3/23/2是一半。但是如果将结果保存为整数(无小数),则仅保存1。这一半去了哪里?它被扔掉了。如果需要,可以将其保存为floatdouble,或使用模数运算符。 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`
    }
}

答案 1 :(得分:1)

0%13 = 0

0/13 = 0

这是简单的数学。

答案 2 :(得分:0)

你没有划分为0,你将0除以13. 0/13 = 0