# V602. The '<' operator should probably be replaced with '<<'. Consider inspecting this expression.

The analyzer has detected a potential error that may be caused by a misprint. It is highly probable that the '<<' operator must be used instead of '<' in an expression.

Consider the following code sample.

    void Foo(unsigned nXNegYNegZNeg, unsigned nXNegYNegZPos,
             unsigned nXNegYPosZNeg, unsigned nXNegYPosZPos)
    {
      unsigned m_nIVSampleDirBitmask =
        (1 << nXNegYNegZNeg) | (1 <  nXNegYNegZPos) |
        (1 << nXNegYPosZNeg) | (1 << nXNegYPosZPos);
      ...
    }

The code contains an error, since it is the '<' operator that is written by accident in the expression. This is the correct code:

    unsigned m_nIVSampleDirBitmask =
      (1 << nXNegYNegZNeg) | (1 << nXNegYNegZPos) |
      (1 << nXNegYPosZNeg) | (1 << nXNegYPosZPos);

Note.

The analyzer considers comparisons ('<', '>') odd if their result is used in binary operations such as '&', '|' or '^'. The diagnostic is more complex but we hope you understand the point in general. On finding such expressions the analyzer emits the V602 warning.

If the analyzer produces a false positive error, you may suppress it using the "//-V602" comment. But in most cases you'd better rewrite this code. It's not a good practice to handle expressions of the 'bool' type using binary operators: it makes the code unevident and less readable.

This diagnostic is classified as:

CWE-480

You can look at examples of errors detected by the V602 diagnostic.