在 C++ 中使用模數運算子

Jinku Hu 2023年10月12日
  1. 使用%運算子計算除法中的餘數
  2. 使用%運算子在 C++ 中生成小於給定最大數的隨機整數
  3. 在 C++ 中使用庫定義的函式物件來替換%運算子
在 C++ 中使用模數運算子

本文將介紹如何在 C++ 中使用模數運算子。

使用%運算子計算除法中的餘數

模 (%)運算子的標準功能是計算除法的餘數。語句的返回值-x % y 代表 x 除以 y 後剩下的餘數。模數運算子的定義是兩個運算元必須是整數,並且除數是非零。下面的例子演示了模數運算子在不同的有符號整數對中的應用。請注意,如果要使用 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 函式,其返回值與所需的最大值使用 modulo 運算子配對。

#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

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook