left + high > Integer.MAX_VALUE
当上述情况发生时,称为整形溢出。JAVA中的int型是32位二进制数,首位0和1分别表示数字的正和负,所以最大的能表示的数为2^31 - 1。若要表示的数大于等于2^31,则会仍进位,也就是首位为1,但计算机会认为这个数是负数。
所以为了保证在二分查找的代码中不发生此类问题,将求中间下表mid的代码写成如下:
mid = left + (right - left) / 2
left + high > Integer.MAX_VALUE
当上述情况发生时,称为整形溢出。JAVA中的int型是32位二进制数,首位0和1分别表示数字的正和负,所以最大的能表示的数为2^31 - 1。若要表示的数大于等于2^31,则会仍进位,也就是首位为1,但计算机会认为这个数是负数。
所以为了保证在二分查找的代码中不发生此类问题,将求中间下表mid的代码写成如下:
mid = left + (right - left) / 2