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

Анализатор обнаружил потенциальную ошибку, которая может возникнуть из\-за опечатки\. Высока вероятность, что в выражении вместо оператора '<' должен использоваться оператор '<<'\.

Рассмотрим пример кода\.

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

Код содержит ошибку, так как случайно в выражении написан оператор '<'\. Корректный вариант кода должен выглядеть так:

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

Примечание\.

Анализатор считает подозрительными сравнения \('<', '\>'\), если полученный результат используется в двоичных операциях, таких как '&', '\|' или '^'\. Диагностика устроена более сложно, но надеемся, что общая идея понятна\. Найдя такие выражения, анализатор выдает предупреждение V602\.

Если анализатор выдает ложное срабатывание, то вы можете подавить его, используя комментарий "//\-V602"\. Но чаще всего, этот код лучше переписать\. С выражениями, которые имеют тип 'bool' лучше не работать, используя двоичные операторы\. Это делает код неочевидным и затрудняет его чтение\.