﻿# V3154\. The 'a % b' expression always evaluates to 0\.

A modulo operation performed on an integer type always returns 0\. This happens because its right operand is represented by the value 1 \(\-1\), which is most likely a typo\.

A common pattern of this error is checking if no remainder is left after dividing a value by 2\. To do this, you use the modulo operation and compare the result with 0 or 1\. Making a typo at this point is easy because since you anticipate the value 1, you may accidentally divide by 1 too\. For example:

```cpp
if ((x % 1) == 1)
{
    ....
}
```

The programmer wrote the value 1 instead of 2, which will result in the 'x % 1' expression always evaluating to 0 no matter the value of 'x'\. Therefore, the condition will always be false\.

Fixed code:

```cpp
if ((x % 2) == 1)
{
    ....
}
```

The following example was taken from a real\-life application:

```cpp
const int SyncReportFrequency = 1;
....
private void TimerOnElapsed(object sender, ElapsedEventArgs e)
{
    if (_reportId % SyncReportFrequency == 0)
    {
        WriteSyncReport();
    }
}
```

The 'SyncReportFrequency ' is a constant equal to 1, so regardless of the value of the '\_reportId' variable, the condition of the 'if' statement will always be true\. 

It is either that the developer made a typo in this code or the condition is superfluous\. Fixed version:

```cpp
const int SyncReportFrequency = 2;
....
private void TimerOnElapsed(object sender, ElapsedEventArgs e)
{
    if (_reportId % SyncReportFrequency == 0)
    {
        WriteSyncReport();
    }
}
```