Bitwise and arithmetic operation on the same data

Оператор со смешанными побитовыми и арифметическими операциями

Описание

Этот дефект возникает, когда побитовые и арифметические операции выполняются в одном выражении.

Риск

Смешанные побитовые и арифметические операции выполняют компиляцию. Однако размер целых типов влияет на результат этих смешанных операций. Для образца арифметики эквивалент левого сдвига (<<) на определенное количество бит зависит от количества бит в сдвигаемой переменной и, следовательно, от внутреннего представления ее типа данных. С помощью сочетания побитовых и арифметических операций одно и то же выражение может привести к различным результатам на разных мишенях.

Смешанные операции также снижают читаемость и поддерживаемость.

Зафиксировать

Разделите побитовые и арифметические операции или используйте только один тип операции на оператор.

Примеры

расширить все

unsigned int bitwisearithmix()
{
    unsigned int var = 50;
    var += (var << 2) + 1;
    return var;
}

Этот пример показывает побитовые и арифметические операции над переменной var. var сдвигается на два (побитово), затем увеличивается на 1 и добавляется к себе (арифметика).

Коррекция - Только арифметические операции

Можно уменьшить это выражение до арифметических операций: var + (var << 2) эквивалентно var * 5.

unsigned int bitwisearithmix()
{
    unsigned int var = 50;
    var = var * 5 +1;
    return var;
}

Информация о результатах

Группа: Хорошая практика
Язык: C | C++
По умолчанию: Off
Синтаксис командной строки: BITWISE_ARITH_MIX
Влияние: Низкое
ИДЕНТИФИКАТОР CWE: 710
Введенный в R2016b