﻿# V8015\. Suspicious use of the bitwise XOR operator '^'\. The exponentiation operation may have been intended here\.

Анализатор обнаружил бинарное выражение, которое потенциально задумывалось как возведение в степень\. Для проведения этой операции был выбран оператор ^, который на самом деле осуществляет побитовое исключающее "ИЛИ"\.

В некоторых языках программирования оператор `^` используется для операции возведения в степень — например, в Basic, R, Haskell\. Однако в Go этот оператор вычисляет побитовое исключающее "ИЛИ" между двумя операндами \(побитовая сумма по модулю 2\)\. Для возведения числа в степень следует использовать функцию [`math.Pow`](https://pkg.go.dev/math#Pow)\. Также можно воспользоваться оператором побитового сдвига влево, если некоторое число умножается на `2` в степени `N`\.

Рассмотрим пример ошибки:

```cpp
x := 2 ^ 16
```

В данном примере будет присвоено значение `18`, вместо значения, которому соответствует `2` в степени `16` \(`65536`\)\. Для того, чтобы получить степень числа `2` можно использовать побитовый сдвиг влево\.

Исправленный вариант:

```cpp
x := 1 << 16
```