~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
Operator Precedence / over 2 years ago
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
I usually don't pay much attention to operator precedence, thinking that it's either obvious, or it gets parentheses. And so recently I got bit in the face by it. I just spent a couple hours trying to find a bug in a set of classes with some nested data buffers and such, until I finally got to this method, which is supposed to extract a bit from an array of unsigned chars:
int DataBuffer::getBit(int index)
{
int whichByte=index/8;
int offset=index%8;
unsigned char theByte=this->get(whichByte);
unsigned char mask=1<<(7-offset);
if(theByte&mask==0)return 0;
return 1;
}
It seems the method was returning 1 at inappropriate times. The hardcore C++ operator precedence nerds will have immediately
noticed that I should have placed some parentheses around my "theByte&mask". Good work all you hardcore C++ operator precedence nerds.
--------------------
:::Comments:::