迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中负数的模数

作者:迹忆客 最近更新:2023/08/31 浏览次数:

在本文中,我们将发现余数和模数之间的差异。 我们将了解 % 运算符的基础知识。

稍后,我们将了解 % 运算符在 Python 和 C++ 中的行为方式。 最后,我们将通过讨论在 C++ 中实现模数功能的几种方法来总结本文。


余数与模数

% 符号的确切行为可能因不同的编程语言而异。 操作员经常产生令人惊讶的结果,让我们感到困惑。

它会产生模数还是余数吗? 在检查其在编程语言中的行为之前,让我们首先澄清它们有何不同。

余数

余数只是两个整数算术除后剩下的部分。 无论是正数还是负数,余数的符号始终由被除数的符号决定。

检查下面的示例可以清楚地理解这一点。

例子:

  1. 7%3=1

    这里的被除数是 7,它是正号,所以结果也将是正号。

  2. -7%3=-1

    这里被除数是-7,是负号,所以结果也将是负号。

  3. 7%-3=1

    这里的被除数是 7,它是正号,所以结果也将是正号。

  4. -7%-3=-1

    这里被除数是-7,是负号,所以结果也将是负号。

模数

当余数与除数符号相反时,模为余数与除数之和;当余数与除数同号时,模为算术除后的剩余部分。

模数将与除数具有相同的符号。 检查下面的示例可以清楚地理解这一点。

例子:

  1. 5%3=2

    这里除数和余数都是正号,因此余数也将是正号。

  2. -5%3=1

    这里,除数和余数的符号相反,因此结果将是余数和除数的和。 即-2 + 3 = 1

  3. 5%-3=-1

    这里除数和余数都是相反的符号。 结果将是余数与除数之和。 即 2 + -3 = -1

  4. -5%-3=-2

    这里除数和余数的符号相同,因此结果与余数相同。

从上面的例子可以清楚地看出,如果被除数和除数都为正,则模和余数相同。 两者在负数的情况下是不同的。

至此,我们希望清楚余数和模数有何不同。 现在我们来谈谈 % 运算符在 Python 和 C++ 中的行为。


C++ 中的 % 运算符

在 C++ 中,% 称为模运算符。 它是一个算术运算符。

它用于计算执行整数除法所产生的余数。 尽管它的名称为“模”,但要记住的重要一点是它不提供模数。

在 C++ 中,% 符号仅返回余数。 检查下面的示例。

#include <iostream>
using namespace std;
int main()
{
    cout << -7 % 3 << endl;
    cout <<  7 % -3 << endl;
}

输出:

-1
 1

正如输出所示,% 运算符没有给出模数。 它只是返回余数。


C++中%的实现

让我们看看%在C++中的实现。 C++ 中的余数根据以下等式返回。

让我们开发使用上面的等式(不使用 % 运算符)计算余数的逻辑。

#include <iostream>
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 <iostream>
#include <math.h>
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 <iostream>
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 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便