模数的实际用途是什么?我知道模数除法是什么。我想到的第一个场景是使用它来查找奇数和偶数,以及时钟算术。但是我可以在哪里使用它?
答案 0 :(得分:22)
我发现最常见的用途是“包裹”你的数组索引。
例如,如果您只想重复遍历数组,可以使用:
int a[10];
for (int i = 0; true; i = (i + 1) % 10)
{
// ... use a[i] ...
}
模数确保i
保持在[0,10]范围内。
答案 1 :(得分:6)
我通常在紧密循环中使用它们,当我必须在每个X循环中执行某些操作而不是每次迭代时都会这样做。
示例:
int i;
for (i = 1; i <= 1000000; i++)
{
do_something(i);
if (i % 1000 == 0)
printf("%d processed\n", i);
}
答案 2 :(得分:5)
要将数字打印为字符串,您需要使用模数来查找数字的值。
string number_to_string(uint number) {
string result = "";
while (number != 0) {
result = cast(char)((number % 10) + '0') ~ result;
// ^^^^^^^^^^^
number /= 10;
}
return result;
}
答案 3 :(得分:5)
模数运算的一个用途是制作hash table时。它用于将哈希函数的值转换为数组的索引。 (如果哈希表大小是2的幂,模数可以用位掩码完成,但它仍然模数运算。)
答案 4 :(得分:4)
对于国际银行帐号的控制号,mod97 technique。
在n
次迭代后也可以大批量做某事。以下是NHibernate的示例:
ISession session = sessionFactory.openSession();
ITransaction tx = session.BeginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.Save(customer);
if ( i % 20 == 0 ) { //20, same as the ADO batch size
//Flush a batch of inserts and release memory:
session.Flush();
session.Clear();
}
}
tx.Commit();
session.Close();
答案 5 :(得分:3)
模数运算在数论,群论,环理论,结理论,抽象代数,密码学,计算机科学,化学以及视觉和音乐艺术中被引用。
根据我的经验,任何足够先进的算法可能会触及上述主题之一。
答案 6 :(得分:3)
缓冲通信的常规实现使用循环缓冲区,您可以使用模运算来管理它们。
答案 7 :(得分:2)
嗯,你可以看到许多观点。如果你把它看作一个数学运算,那么它只是一个模数除法。即使我们不需要像%那样做,我们也可以使用减法来实现,但是每种编程语言都以非常优化的方式实现它。
modulu division不仅限于寻找奇数和偶数或时钟算术。有数百种算法需要这种模块操作,例如加密算法等。所以这是一般的数学运算,如其他+, - ,*,/等。
除了数学视角,不同的语言使用此符号来定义内置数据结构,就像在Perl %hash
中用来表示程序员声明了一个哈希。所以这一切都因编程语言设计而异。
所以仍有许多其他观点可以添加到%的使用列表中。
答案 8 :(得分:2)
对于没有按位运算符的语言,可以使用模数来获得数字的最低n位。例如,要获得x的最低8位:
x % 256
相当于:
x & 255