同一份代码在 C++17 和 C++20 下表现出了不同情况,得到了 WA 和 AC 的成绩,观察应该是 __lg 抽风了,所以 __lg 为什么会错呢?
PS:不会出现 __lg(0) 的情况
#include<bits/stdc++.h>
#define N 8005
#define ll long long
using namespace std;
ll l,r,res;
int cut;
void mian()
{
scanf("%lld%lld",&l,&r);
if(l==r)
{
printf("1\n");
return;
}
cut=__lg(l^r);
const ll full=(1ll<<cut)-1;
res=full-(full&l)+1;
ll A=l&full,B=r&full;
if(__lg(A)>__lg(B)) res+=((1ll<<__lg(B)+1))+res;
else res+=full+1;
printf("%lld\n",res);
}
int main()
{
int _=1;
while(_--) mian();
return 0;
}