﻿# V3227\. The precedence of the arithmetic operator is higher than that of the shift operator\. Consider using parentheses in the expression\.

Анализатор обнаружил потенциальную ошибку: выражение может выдавать не тот результат, на который рассчитывал программист\. Причина в том, что операции сложения, вычитания, деления и умножения имеют более высокий приоритет, чем операции сдвига\.

Рассмотрим пример:

```cpp
private BigInteger OddPow (uint b, BigInteger exp)
{
  uint [] wkspace = new uint [mod.length << 1 + 1];
  ....
}
```

Скорее всего, разработчик ожидал, что результат сдвига `mod.length` на `1` будет сложен с `1`\. Но согласно приоритету операций, вначале произойдёт сложение, а уже потом — сдвиг\. Для исправления нужно добавить скобки\.

Корректный вариант кода:

```cpp
private BigInteger OddPow (uint b, BigInteger exp)
{
  uint [] wkspace = new uint [(mod.length << 1) + 1];
  ....
}
```