﻿# V6034\. Shift by N bits is inconsistent with the size of type\.

Анализатор обнаружил потенциальную ошибку, связанную со сдвигом целого числа на 'N' бит, при этом 'N' больше размера этого числового типа в битах\. 

Давайте рассмотрим пример:

```cpp
long convert(int x, int y, int shift)
{
  if (shift < 0 || shift > 32) {
    return -1;
  }
  return (x << shift) + y;
}
```

В данном случае хотели собрать 64\-битное число из 2\-х 32\-битных, сдвинув 'x' на некоторое количество бит 'shift' и сложив старшую и младшую части\. Есть вероятность того, что 'shift' может иметь значение равное 32\. Поскольку 'x' в момент сдвига является 32\-битным числом, то сдвиг на 32 бита эквивалентен сдвигу на 0 бит, что приведет к некорректному результату\.

Корректный вариант может выглядеть так:

```cpp
long convert(int x, int y, int shift)
{
  if (shift < 0 || shift > 32) {
    return -1;
  }
  return ((long)x << shift) + y;
}
```