C++에서 음수에 대한 모듈러스
이 튜토리얼에서는 나머지와 모듈러스의 차이점을 발견할 것입니다. %
연산자의 기본에 대해 배웁니다.
나중에 파이썬과 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 <iostream>
using namespace std;
int main() {
cout << -7 % 3 << endl;
cout << 7 % -3 << endl;
}
출력:
-1
1
출력에서 알 수 있듯이 %
연산자는 모듈러스를 제공하지 않습니다. 나머지를 반환하는 것입니다.
C++에서 %
구현
C++에서 %
구현을 살펴보겠습니다. C++에서 나머지는 아래 방정식에 따라 반환됩니다.
나머지 = a - ( b * trunc ( a / b ) )
%
연산자 없이 위의 방정식을 사용하여 나머지를 계산하는 논리를 개발해 보겠습니다.
#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에서 산술 연산으로 간주됩니다.
정수 나누기를 수행한 결과인 modulus
를 계산하는 데 사용됩니다. 이것이 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의 모듈러스는 아래 방정식에 따라 반환됩니다.
모듈러스 = a - ( b * floor( a / b ) )
%
연산자 없이 위의 방정식을 사용하여 계수를 계산하는 논리를 개발해 보겠습니다.
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 <math.h>
#include <iostream>
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
방법 2: 나머지와 제수 더하기
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