Bitwise and arithmetic operation on the same data

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

Описание

Битовая и арифметическая операция на тех же данных обнаруживает операторы с битовыми и арифметическими операциями на той же переменной или выражении.

Риск

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

Фиксация

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

Примеры

развернуть все

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

Этот пример показывает битовые и арифметические операции на переменной varvar смещен два (поразрядные), затем увеличены на 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
Удар: низко
ID CWE: 710

Введенный в R2017b