Whenever I need to average two numbers for an algorithm like binary search, I always do something like this:
int mid = low + ((high - low) / 2);
You are safe from integer overflows by using the way you said you already use, which is:
Let you compiler do it's job to optimize this if it needs to.