The analyzer detected a suspicious bitwise expression. This expression was meant to change certain bits in a variable, but the value this variable refers to will actually stay unchanged.
Consider the following example:
A &= ~(0 << Y);
A = A & ~(0 << Y);
The programmer wanted to clear a certain bit in the variable's value but made a mistake and wrote 0 instead of 1.
Both expressions evaluate to the same result, so let's examine the second line as a clearer example. Suppose we have the following values of the variables in bit representation:
A = 0..0101
A = 0..0101 & ~(0..0000 << 0..00001)
Shifting the value 0 by one bit to the left won't change anything; we'll get the following expression:
A = 0..0101 & ~0..0000
Then, the bitwise negation operation will be executed, resulting in the following expression:
A = 0..0101 & 11111111
After executing the bitwise "AND" operation, the original and resulting expressions will turn out to be the same:
A = 0..0101
The fixed version of the code should look like this:
A &= ~(1 << Y);
A = A & ~(1 << Y);
This diagnostic is classified as:
Was this page helpful?
Your message has been sent. We will email you at
If you do not see the email in your inbox, please check if it is filtered to one of the following folders:
Take
a chance!