移位运算符优先级比加减运算符低
这是我在做二分查找时发现的问题
误区
发现问题
- 直接除2
int mid = start + (end - start) / 2;
- 移位的写法一
int mid = start + (end - start) >> 1;
- 移位的写法二
int mid = start + ((end - start) >> 1);
实际结果
第一个跟第三个通过,第二个超时。为什么?
举例子证实
代码如下
public static void main(String[] args) {
System.out.println(56 + (89 - 67)/2);
System.out.println(56 + (89 - 67) >> 1);
System.out.println(56 + ((89 - 67) >> 1));
}