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