HomeSearch

# C# Modulo Operator: Get Remainder From Division

Use the modulo division operator to get remainders from dividing numbers.

## Modulo.

This operator gets a remainder. It provides a way to execute code once every several iterations of a loop. It uses the percentage sign character in the lexical syntax.

## Modulo, notes.

Modulo has some unique properties. As with all low-level operations, it has a specific cost. We analyze modulo division in the C# language.DivideOdd, Even

## Example.

Modulo division is expressed with the percentage sign. It is implemented with the rem instruction in the intermediate language. Rem takes the top 2 values on the evaluation stack.

Then: Rem performs the computation that returns the remainder of the division. It pushes that value onto the evaluation stack.

Here: This example demonstrates the math behind modulo. The expressions here are turned into constants during the C# compilation step.

And: No rem instructions are generated. Programs are evaluated in many phases, but the end result should always make sense.

C# program that uses modulo operator using System; class Program { static void Main() { // // When 1000 is divided by 90, the remainder is 10. // Console.WriteLine(1000 % 90); // // When 100 is divided by 90, the remainder is also 10. // Console.WriteLine(100 % 90); // // When 81 is divided by 80, the remainder is 1. // Console.WriteLine(81 % 80); // // When 1 is divided by 1, the remainder is zero. // Console.WriteLine(1 % 1); } } Output 10 10 1 0

## Notes, above program.

The program shows the remainders of the divisions of the 2 integers at each step. The runtime never performs modulo divisions here. The C# compiler does.

Important: We see that 1000 and 100 divide into parts of 90 with a remainder of 10.

Note: If the first argument to the predefined modulo operator is 81 and the second operand is 80, the expression evaluates to a value of 1.

## Notes, continued.

If you use modulo on the same 2 operands, you receive 0 because there is no remainder. If you use modulo by 0, you will get a compile error or a runtime exception.DivideByZeroExceptionCompile-Time Error

## Example 2.

You can apply modulo in a loop to achieve an interval or step effect. If you use a modulo operation on the loop index variable, you can execute code at an interval.

Note: This example shows how to write to the screen every ten iterations in the for-loop.

C# program that uses modulo division in loop using System; class Program { static void Main() { // // Prints every tenth number from 0 to 200. // Includes the first iteration. // for (int i = 0; i < 200; i++) { if ((i % 10) == 0) { Console.WriteLine(i); } } } } Output 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190

## Notes, if.

Often, modulo divisions are performed in ifs and used in control flow. The three numbers in the condition in the if-statement can have any values, but we cannot divide by 0.

## Discussion.

Modulo has several common uses in programs. You can use modulo division in loops to only execute code every several iterations. This can improve real code.

Note: We do not often need to compute numeric remainders for user consumption. The regular division operator may be more useful here.

Odd: You can use modulo to test for odd numbers and even numbers. You can define odd numbers as not-even numbers.

Odd, Even

## Performance.

Modulo is slower than other arithmetic operators such as increment and decrement or even multiply. This is a hardware limitation on computers.

But: The total time required for individual modulo operations is tiny compared to other tasks such as disk reads or network accesses.

So: If you can reduce those operations with modulo division, you can improve overall performance.

## Performance, table.

The time required for modulo division depends on hardware and other factors. Some analysis from Microsoft is helpful. This page provides a table listing times required.Writing Faster Managed Code: Microsoft Docs
Estimated costs of instructions: Add: 1 ns Subtract: 1 ns Multiply: 2.7 ns Divide: 35.9 ns

## Performance, loops.

You may rarely have a modulo division in a hot path and this can cause a loss of performance. This will almost always occur in a loop body or in a recursive method.

Tip: You can apply a technique called "strength reduction" manually to convert the modulo operation into a subtraction or addition.

And: To do this, add another field or local variable. Then, in each iteration of the loop, decrement it and test it against zero.

Then: When zero is reached, set it to its maximum value again. This resets the pattern.

## A summary.

The modulo operator is often useful. This is implemented in the CLI as a rem instruction. The C# compiler calculates modulo divisions of constants at compile-time.

## Modulo division

returns the remainder of the 2 operands. We use the "percent" symbol for modulo in the C# language. This is a powerful operator, but it has its nuances.
Home
Dot Net Perls