[英]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
。 那一半去了哪里? 它被扔掉了。 如果需要,可以將其另存為float
或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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.