#include<iostream>
using namespace std;
int main()
{
//升序a数组中找到大于x的最小值;
int a[5] = { 0,1,2,3,4 };
int x;
cin >> x;
int l = 0, r = 4;
while (r > l)
{
int mid = (l + r) >> 1;//如果出现mid = (l + r )>>1 = l 的情况还是会继续循环
if (a[mid] >= x)
r = mid;
else
l = mid + 1;
}
//升序a数组中找到小于x的最大值
while (r > l)
{
int mid = (l + r + 1) >> 1;//如果不+1的话会有mid = (l + r )>>1 = l 的情况而进入l= mid则无限循环若进入r=mid-1则r<l循环不能以l == r结束
if (a[mid] <= x)
l = mid;
else
r = mid - 1;
}
}
/*右移运算是向下取证,整数除以2是向0取整,在二分值域包含负数时后者不能正常工作*/
右移运算是向下取证,整数除以2是向0取整,在二分值域包含负数时后者不能正常工作