Open In App

Modulo Operator (%) in C/C++ with Examples

Last Updated : 30 Oct, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

In C or C++, the modulo operator (also known as the modulus operator), denoted by %, is an arithmetic operator. The modulo division operator produces the remainder of an integer division which is also called the modulus of the operation.

Syntax of Modulus Operator

If x and y are integers, then the expression:

x % y;

pronounced as “x mod y”. For example, 10 % 2 will be pronounced as ” Ten mod Two”.

Return Value of Modulo Operator

  • If y completely divides x, the result of the expression is 0.
  • If x is not completely divisible by y, then the result will be the remainder in the range [0, y-1]
  • (x % y) < (x / 2) ………if (x >= y)
  • (x % y) = x ……… if (x < y)
  • If y is 0, then division by zero is a compile-time error.

Example of Modulo Operator

Below is the C/C++ program to demonstrate the working of the modulo operator:

C++




// C++ Program to demonstrate the working of modulo operator
#include <iostream>
 
using namespace std;
 
// Driver code
int main(void)
{
    int x, y;
 
    int result;
 
    x = 3;
    y = 4;
 
    // using modulo operator
    result = x % y;
    cout << result << endl;
 
    result = y % x;
    cout << result << endl;
 
    // for different values
    x = 4;
    y = 2;
 
    result = x % y;
    cout << result;
 
    return 0;
}
 
//    This code is contributed by Mayank Tyagi


C




// C Program to illustrate the working of modulo operator
#include <stdio.h>
 
int main(void)
{
    int x, y;
 
    int result;
 
    x = 3;
    y = 4;
    // using modulo operator
    result = x % y;
    printf("%d", result);
 
    result = y % x;
    printf("\n%d", result);
 
    // for different values
    x = 4;
    y = 2;
    result = x % y;
    printf("\n%d", result);
 
    return 0;
}


Restrictions on the Modulo Operator

The modulo operator has few restrictions or limitations on it. The % modulus operator cannot be applied to floating-point numbers i.e. float or double. If you try to use the modulo operator with floating-point constants or variables, the compiler will produce an error.

Example 1: C/C++ program to demonstrate the restrictions of the modulo operator.

C++




// C++ Program to demonstrate the restrictions of modulo
// operator
#include <iostream>
using namespace std;
 
// Driver code
int main()
{
    float x, y;
 
    x = 2.3;
    y = 1.5;
 
    // modulo for floating point values
    result = x % y;
    cout << result;
 
    return 0;
}
 
// This code is contributed by Harshit Srivastava


C




// C Program to illustrate the working of modulo operator
#include <stdio.h>
 
int main(void)
{
    float x, y;
 
    float result;
 
    x = 2.3;
    y = 1.5;
 
    // modulo for floating point values
    result = x % y;
    printf("%f", result);
 
    return 0;
}


Output

Compilation Error in C code :- prog.c: In function 'main':
prog.c:19:16: error:
invalid operands to binary % (have 'float' and 'float')
result = x % y;
^

Modulo Operator for Negative Operands

The sign of the result for the modulo operator is machine-dependent for negative operands, as the action takes as a result of underflow or overflow. 

Example 2: C/C++ program to demonstrate the modulo operator for negative operands.

C++




// C++ Program to demonstrate the working of the modulo
// operator for negative operands
#include <iostream>
using namespace std;
 
// Driver code
int main(void)
{
    int x, y;
 
    int result;
 
    x = -3;
    y = 4;
 
    // modulo for negative operands
    result = x % y;
    cout << result << endl;
 
    x = 4;
    y = -2;
    result = x % y;
    cout << result << endl;
 
    x = -3;
    y = -4;
    result = x % y;
    cout << result;
 
    return 0;
}
 
// This code is contributed by Harshit Srivastava


C




// C Program to illustrate the working of the modulo
// operator with negative operands
#include <stdio.h>
 
int main(void)
{
    int x, y;
 
    int result;
 
    x = -3;
    y = 4;
 
    // modulo for negative operands
    result = x % y;
    printf("%d", result);
 
    x = 4;
    y = -2;
    result = x % y;
    printf("\n%d", result);
 
    x = -3;
    y = -4;
    result = x % y;
    printf("\n%d", result);
 
    return 0;
}


Output

-3
0
-3

Note: The return value in this case is compiler dependent.

FAQs on Modulo Operator

Q1. Define mod.

Answer:

In C/C++ programming languages, mod refers to the mathematical operation in which one number is divided by another, and the remainder is returned.

It can be performed using modulo operator (%).

Q2. What is mod arithmetic?

Answer:

Mod arithmetic refers to the process in which a number keeps wrapping around a certain point in such a way that it is always less than that certain point. For example,

Consider the number n = 10 and the point p = 20.
When we increment n 10 times, it will be n = 20 but in modular arithmetic, it should ways be smaller that the specified point.

One way to do that is to use modulo operator as:

n++;
n = n % p;

To learn more about modular aritimatic, refer to the article – Modular Arithmatic

Q3. What is the difference between modulo and divide operator?

Answer:

The major difference between modulo and division operator is that:

  • Modulo Operator (%) returns the remainder after dividing one number with other.
  • Divide Operator (/) returns the quotient after dividing one number with other.


Similar Reads

vector::operator= and vector::operator[ ] in C++ STL
Vectors are same as dynamic arrays with the ability to resize itself automatically when an element is inserted or deleted, with their storage being handled automatically by the container. vector::operator= This operator is used to assign new contents to the container by replacing the existing contents. It also modifies the size according to the new
4 min read
deque::operator= and deque::operator[] in C++ STL
Deque or Double ended queues are sequence containers with the feature of expansion and contraction on both the ends. They are similar to vectors, but are more efficient in case of insertion and deletion of elements at the end, and also the beginning. Unlike vectors, contiguous storage allocation may not be guaranteed. deque::operator= This operator
4 min read
Operator Overloading '&lt;&lt;' and '&gt;&gt;' operator in a linked list class
Prerequisite: Operator Overloading in C++, Linked List in C++ C++ comes with libraries that provide ways for performing Input and Output. In C++, Input and Output are performed as a sequence of bytes, also known as streams. Input and Output stream are managed by the iostream library. cin and cout are the standard objects for the input stream and ou
4 min read
Why overriding both the global new operator and the class-specific operator is not ambiguous?
The below section deals about overload resolution as it helps in the fundamentals of overloading and overriding. Predict the output: C/C++ Code #include &lt;iostream&gt; using namespace std; class Gfg { public: void printHello() { cout &lt;&lt; &quot;hello gfg-class specific&quot; &lt;&lt; endl; } }; void printHello() { cout &lt;&lt; &quot;hello gf
5 min read
3-way comparison operator (Space Ship Operator) in C++ 20
The three-way comparison operator "&lt;=&gt;" is called a spaceship operator. The spaceship operator determines for two objects A and B whether A &lt; B, A = B, or A &gt; B. The spaceship operator or the compiler can auto-generate it for us. Also, a three-way comparison is a function that will give the entire relationship in one query. Traditionall
3 min read
Arrow Operator vs. Dot Operator in C++
In C++, we use the arrow operator (-&gt;) and the dot operator (.) to access members of classes, structures, and unions. Although they sound similar but they are used in different contexts and have distinct behaviours. In this article, we will learn the key differences between the arrow operator and the dot operator in C++ and clarify the confusion
3 min read
Minimum product modulo N possible for any pair from a given range
Given three integers L, R, and N, the task is to find the minimum possible value of (i * j) % N, where L ? i &lt; j ? R. Examples: Input: L = 2020, R = 2040, N = 2019Output: 2Explanation: (2020 * 2021) % 2019 = 2 Input: L = 15, R = 30, N = 15Output: 0Explanation: If one of the elements of the pair is 15, then the product of all such pairs will be d
5 min read
Find the value of P and modular inverse of Q modulo 998244353
Given two integer P and Q, the task is to find the value of P and modular inverse of Q modulo 998244353. That is [Tex]P * Q^{-1} \% 998244353 [/Tex] Note: P and Q are co-prime integersExamples: Input: P = 1, Q = 4Output: 748683265Explanation:Refer below for the explanation of the example. Input: P = 1, Q = 16Output: 935854081 Approach: The key obse
5 min read
Logical Not ! operator in C with Examples
! is a type of Logical Operator and is read as "NOT" or "Logical NOT". This operator is used to perform "logical NOT" operation, i.e. the function similar to Inverter gate in digital electronics. Syntax: !Condition // returns true if the conditions is false // else returns false Below is an example to demonstrate ! operator: Example: // C program t
1 min read
ios operator() function in C++ with Examples
The operator() method of ios class in C++ is used to any error flag of this stream is set. This includes the failbit or the badbit. Syntax: operator void*() const; Parameters: This method does not accept any parameter. Return Value: This method returns a null pointer if any error bit is set of this stream. Example 1: // C++ code to demonstrate // t
1 min read
Practice Tags :