簡體   English   中英

模運算符的語義是什么?

[英]What are the semantics of the modulus operator?

我想知道的是C#for Programmers 2010中的一段代碼,這里是:

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

我知道計數是陣列內存中的插槽,而新Card將衣服和面孔放在卡座中,它們返回計數值。 我不明白的是,如何模數並除以零? 還是我誤會了? 謝謝

這個問題聽起來像是模運算符使您感到困惑。 模數( % )運算符根據除法計算余數。 它的結構與除法(分子/分母)相同。 看來您將i % 13視為remainder of 13/i 那是錯的。 它是remainder of i/13 因此,如果i為零,則模運算符將返回0。您永遠不會應用程序中除以零。

一個例子是3/2 3/2是1和一半。 但是,如果將結果保存為整數(無小數),則僅保存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`
    }
}

0%13 = 0

0/13 = 0

這是簡單的數學。

您沒有被0除,而是被0除以13。0/13 = 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM