The following is the pseudocode I got from a TopCoder tutorial about binary search
binary_search(A, target): lo = 1, hi = size(A) while lo <= hi:
Yes, (hi + lo) / 2 may overflow. This was an actual bug in Java binary search implementation.
No, there are no other reasons for this.