我试图在几年前用我的新语言C#重新创建我的C ++因子程序。我所记得的只是它可能涉及一个模数,而且可能没有。我知道它涉及至少一个for和if语句。然而,当我开始尝试重新创建它时,我不断得到应有的东西。我认为它与我有关,不理解循环,但事实证明我理解循环就好了。我不明白的是在执行数学运算时如何使用模数。
例如,当我说出以下内容时,我正在做什么:(忽略它可能实际上不起作用,这只是一个例子)
if(12 % 2 == 0)
{
Console.WriteLine("I don't understand.");
}
这种事情我还没有掌握。我意识到这是剩余的,这是我能掌握的,而不是它在实际编程中的实际应用。经过一番思考和修补后,我设法让我的因子程序在C#中工作,这并不意味着我理解这个运算符或它的用途。我无法再访问旧的C ++文件。
答案 0 :(得分:4)
%(modulo)运算符从除法中产生余数。在您的示例中,余数等于0, if 计算为 true (0 == 0)。一个典型的例子就是它用于查看数字是否均匀。
if (number % 2 == 0) {
// even
} else {
// odd
}
答案 1 :(得分:3)
将模数视为带指针(旋转器)的圆形,最简单的例子是时钟。
注意顶部是零。
模数函数将任何值映射到微调器上的其中一个值,将%
左侧的值视为微调器周围的步数,第二个值作为总数的值旋转器中的步骤,所以我们有以下内容。
0%12 = 0
1%12 = 1
12%12 = 0
13%12 = 1
我们总是从0开始。
所以如果我们绕着12步旋转器走0步,我们仍然是0,如果我们从0开始走1步,我们在1,如果我们走12步,我们回到0.如果我们走13,我们全部去一路走来又一结束了。
我希望这有助于您将其可视化。
当您使用类似数组的结构时,它会有所帮助,并且您希望循环使用它们。想象一下,你有一个星期几的数组,7个元素(星期一)。您希望始终显示当天的第3天。好今天是星期二,所以数组元素是days[1]
,如果我们想要从现在起3天后我们做days[1+3];
现在这没关系,但是如果我们在星期六那么{{1}并希望从那里获得3天?好吧,我们有(days[5])
这是一个超出范围的索引错误,因为我们的数组只有7个元素(最大索引为6),我们试图访问第8个元素。
但是,了解您对模数和微调器的了解,现在可以执行以下操作:
days[5+3]
当它越过数组的边界时,它会回绕并再次从头开始。这有很多应用。只要记住旋转器的可视化,就在它点击我的脑袋时。
答案 2 :(得分:1)
模运算符%
返回除法运算的余数。例如,13 / 5 = 2
,13 % 5 = 3
(使用整数数学)。
检查% 2
的值以查看它是否为偶数是一种常见的策略。如果是偶数,则余数为0,否则为1。
至于你具体使用它,你正在做12 % 2
,它不仅是0,而且总是为0.这将始终使if条件成为12 % 2 == 0
是的,这使得if更加冗余。
答案 3 :(得分:1)
如上所述,它常用于检查偶数/奇数,但也可以用它来间隔迭代循环,或将文件拆分成mod块。我个人使用mod来解决钟面类型问题,因为我的数据经常导航一圈。
寄存器是mod,例如8位寄存器在2 ^ 8处翻转,因此可以强制符合寄存器大小var = mod(var,256)
我对mod知道的最后一件事是它用于校验和和随机数生成,但我还没有进入原因。在所有
答案 4 :(得分:-1)
您可以使用此示例的示例是在某些for
循环中索引数组。例如,使用简单的公式,使用双三次插值定义重采样图像的新像素值:
其中
暂时不要担心双三次插值究竟是什么,我们只关心执行似乎是两个简单的for
循环:一个用于索引i
而一个用于索引{{ 1}}。请注意,向量'a'的长度为16个数字。
有人尝试的简单j
循环可能是:
for
或者您可以在一个int n= 0;
for(int i = 0; i < 4; ++i)
{
for(int j = 0; i < 4; ++j)
{
pxy += a[n] * pow(x,i) * pow(y,j); // p(x,y)
n++; // n = 15 when finished
}
}
循环中执行此操作:
for
在循环中打印for(int i = 0; i < 16; ++i)
{
int i_new = floor(i / 4.0); // i_new provides indices 0-3 incrementing every 4 iterations of loop
int j_new = i % 4; // j_new is reset to 0 when i is a multiple of 4
pxy += a[i] * pow(x,i_new) * pow(y,j_new); // p(x,y)
}
和i_new
:
j_new
如您所见,i_new j_new
0 0
0 1
0 2
0 3
1 0
1 1
1 2
1 3
2 0
2 1
2 2
2 3
3 0
3 1
3 2
3 3
非常有用。