~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
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:::

(New comment)