C++에서 모듈로 연산자 사용

Jinku Hu 2023년10월12일
  1. %연산자를 사용하여 나눗셈의 나머지를 계산합니다
  2. %연산자를 사용하여 C++에서 주어진 최대 수보다 작은 임의의 정수 생성
  3. 라이브러리 정의 함수 개체를 사용하여 C++에서%연산자 대체
C++에서 모듈로 연산자 사용

이 기사에서는 C++에서 모듈로 연산자를 사용하는 방법을 소개합니다.

%연산자를 사용하여 나눗셈의 나머지를 계산합니다

모듈로 (%) 연산자의 표준 기능은 나눗셈의 나머지를 계산하는 것입니다. 명령문의 반환 값-x % yxy로 나눈 후 남은 나머지를 나타냅니다. 모듈로 연산자는 두 피연산자가 정수 여야하고 제수가 0이 아니도록 정의됩니다. 다음 예제는 다른 부호있는 정수 쌍과 함께 사용되는 모듈로 연산자를 보여줍니다. printf 함수를 사용하여 콘솔에%문자를 인쇄하려면%를 사용해야합니다.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  for (size_t i = 0; i < ivec1.size(); ++i) {
    printf("% -d %% % -d = % -d\n", ivec1[i], ivec2[i], ivec1[i] % ivec2[i]);
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

 24 %  7 =  3
 24 %  8 =  0
-24 % -8 =  0
-24 % -7 = -3
 24 % -6 =  0

%연산자를 사용하여 C++에서 주어진 최대 수보다 작은 임의의 정수 생성

모듈로 연산자의 또 다른 사용법은 특정 정수보다 작은 숫자 만 제공하도록 난수 생성기를 제어하는 것입니다. 프로그래머는 임의의 품질 요구에 따라 난수 생성 툴킷을 선택해야하지만 두 방법을 모두%와 결합하여 생성 된 숫자의 상한을 지정할 수 있습니다. 이 경우 모듈로 연산자를 사용하여 반환 값이 원하는 최대 값과 쌍을 이루는rand 함수를 사용합니다.

#include <ctime>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

constexpr int MAX = 1000;
constexpr int NUMS_TO_GENERATE = 10;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  std::srand(std::time(nullptr));
  for (int i = 0; i < NUMS_TO_GENERATE; i++) {
    cout << rand() % MAX << "; ";
  }
  cout << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

98; 194; 398; 190; 782; 550; 404; 557; 509; 945;

라이브러리 정의 함수 개체를 사용하여 C++에서%연산자 대체

C++ 표준 라이브러리는 전통적인 산술, 관계형 및 논리 연산자를 나타내는 여러 클래스를 정의합니다. 이를 함수 객체라고하며std::plus<Type>,std::modulus<Type>등의 이름을 갖습니다.Type은 호출 연산자의 매개 변수 유형을 지정합니다. 다음 코드 샘플은 정수 벡터에 사용되는std::modulus 함수 객체를 보여줍니다.

#include <ctime>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  std::modulus<> intMod;
  int mod_of_nums = intMod(ivec1[1], ivec2[1]);
  printf("%d %% %d = %d\n", ivec1[1], ivec2[1], mod_of_nums);

  return EXIT_SUCCESS;
}

출력:

24 % 8 = 0
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Modulo