Анализатор обнаружил подозрительное битовое выражение. Выражение написано для того, чтобы изменить определённые биты в переменной. Но значение переменной останется прежним.
Пример подозрительного кода:
A &= ~(0 << Y);
A = A & ~(0 << Y);
Программист планировал сбросить определенный бит в переменной, но допустил ошибку. написав 0, вместо 1.
Обе строки идентичны по результату, поэтому рассмотрим вторую строку, как более наглядный пример. Предположим, что имеется следующие значение переменных в битовом представлении:
A = 0..0101
A = 0..0101 & ~(0..0000 << 0..00001)
Сдвиг влево на один бит значения 0 - ни к чему не приведет. В итоге получится следующие выражение:
A = 0..0101 & ~0..0000
Далее будет выполнена операции побитового отрицания, что приведет к следующему выражению:
A = 0..0101 & 11111111
После операции побитового "и", получится, что исходное и результирующее выражение равны:
A = 0..0101
Исправленный вариант кода должен выглядеть, следующим образом:
A &= ~(1 << Y);
A = A & ~(1 << Y);
Данная диагностика классифицируется как: