c 中负数的模数
在本文中,我们将发现余数和模数之间的差异。 我们将了解 % 运算符的基础知识。
稍后,我们将了解 % 运算符在 python 和 c 中的行为方式。 最后,我们将通过讨论在 c 中实现模数功能的几种方法来总结本文。
余数与模数
% 符号的确切行为可能因不同的编程语言而异。 操作员经常产生令人惊讶的结果,让我们感到困惑。
它会产生模数还是余数吗? 在检查其在编程语言中的行为之前,让我们首先澄清它们有何不同。
余数
余数只是两个整数算术除后剩下的部分。 无论是正数还是负数,余数的符号始终由被除数的符号决定。
检查下面的示例可以清楚地理解这一点。
例子:
-
7%3=1
这里的被除数是 7,它是正号,所以结果也将是正号。
-
-7%3=-1
这里被除数是-7,是负号,所以结果也将是负号。
-
7%-3=1
这里的被除数是 7,它是正号,所以结果也将是正号。
-
-7%-3=-1
这里被除数是-7,是负号,所以结果也将是负号。
模数
当余数与除数符号相反时,模为余数与除数之和;当余数与除数同号时,模为算术除后的剩余部分。
模数将与除数具有相同的符号。 检查下面的示例可以清楚地理解这一点。
例子:
-
5%3=2
这里除数和余数都是正号,因此余数也将是正号。
-
-5%3=1
这里,除数和余数的符号相反,因此结果将是余数和除数的和。 即-2 3 = 1
-
5%-3=-1
这里除数和余数都是相反的符号。 结果将是余数与除数之和。 即 2 -3 = -1
-
-5%-3=-2
这里除数和余数的符号相同,因此结果与余数相同。
从上面的例子可以清楚地看出,如果被除数和除数都为正,则模和余数相同。 两者在负数的情况下是不同的。
至此,我们希望清楚余数和模数有何不同。 现在我们来谈谈 % 运算符在 python 和 c 中的行为。
c 中的 % 运算符
在 c 中,%
称为模运算符。 它是一个算术运算符。
它用于计算执行整数除法所产生的余数。 尽管它的名称为“模”,但要记住的重要一点是它不提供模数。
在 c 中,%
符号仅返回余数。 检查下面的示例。
#include
using namespace std;
int main()
{
cout << -7 % 3 << endl;
cout << 7 % -3 << endl;
}
输出:
-1
1
正如输出所示,% 运算符没有给出模数。 它只是返回余数。
c 中%的实现
让我们看看%在c 中的实现。 c 中的余数根据以下等式返回。
让我们开发使用上面的等式(不使用 % 运算符)计算余数的逻辑。
#include
using namespace std;
int calremainder(int a, int b)
{
int q = a / b;
return a - (b * q);
}
int main()
{
int a = -7, b = 3;
cout << calremainder(a, b) << endl;
}
输出:
-1
python 中的 % 运算符
在 python 中,% 被称为模运算符。 模运算符在 python 中被视为算术运算。
它用于计算执行整数除法所产生的模数。 这就是python与c 的不同之处。
当我们在 c 中使用模运算符时,它返回余数,而 python 返回模数。 检查下面的示例以观察 python 中模运算符的行为。
print (-7 % 3)
print (7 % -3)
输出:
2
-2
在第一个示例中,-7 % 3 给出余数 -1。 由于余数 (-1) 和除数 (3) 符号相反,因此它们的和将为我们提供模数。 即-1 3 = 2。
例2也是如此。
python中%的实现
我们来看看%在python中的实现。 python 中的模数根据以下等式返回。
让我们使用上面的等式(不使用 % 运算符)来开发计算模数的逻辑。
from math import floor
def calmodulus(a, b):
q = floor(a / b)
return a - b * q
print (calmodulus(-7, 3))
输出:
2
在 c 中实现 python 等效模数的方法
我们研究了余数和模数的区别以及 % 运算符在 python 和 c 中的行为方式。 在 python 中,当您将 % 与正除数一起使用时,您总是会得到非负值。
大多数时候,我们使用正除数,并且我们需要模数的功能而不仅仅是余数。 如果除数为正号,则模数始终返回正值。
让我们看看在 c 中实现此行为的不同技术。
方法 1:实现方程
我们可以通过在 c 中实现等式 modulus = a - ( b * floor( a / b ) )
来实现 python 模数行为。
#include
#include
using namespace std;
int getmodulus(int dividend, int divisor)
{
// type casting is necessary as (int)/(int) will give int result, i.e. -5 / 2 will give -1 and not -2.5
int t = (int)floor((double)dividend / divisor);
return dividend - divisor * t;
}
int main()
{
cout << getmodulus(-8, 3);
}
输出:
1
方法二:余数与除数相加
在 c 中实现模数功能的另一种方法是,如果余数和除数的符号相反,则将它们相加。
我们假设除数是正号,因此每当我们得到负余数时,我们将其添加到除数以获得模值。
#include
using namespace std;
int getmodulus(int dividend, int divisor)
{
int t = dividend % divisor;
return t >= 0 ? t : t divisor;
}
int main()
{
cout << getmodulus(-7,3);
}
输出:
2
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:c
-
可以通过使用复位按钮,softwarereset 库和 adafruit sleepydog 库来复位 arduino。
发布时间:2024/03/13 浏览次数:181 分类:c
-
可以使用简单的方法 toint()函数和 serial.parseint()函数将 char 转换为 int。
发布时间:2024/03/13 浏览次数:151 分类:c
-
可以使用 arduino 中的循环制作计数器。