int a = 2147483645;
int b = 2147483647;
求取平均值
System.out.println((a + b) / 2);
System.out.println(a + (b - a) / 2);
System.out.println((a + b) >> 1);
System.out.println((a + b) >>> 1);
运行结果
-2
2147483646
-2
2147483646
应采用:
① a + (b-a)
②(a + b) >>> 1
>>> 表示无符号右移,>> 表示有符号右移,右移n位相当于除以2的n次幂
两者的区别在于右移后,>>> 最高位补0,>> 正数最高位补0负数补1
所以对于正数来讲,两者没有区别,但对于负数应该使用后者