为什么一个数(开 long long) 在右移 64 位时会出现问题。
比如以下代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline long long read(){
long long x=0;int f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
return x*f;
}
signed main(){
int x = (1ll << 13) - 1;
cout << (x >> 64) << endl;
return 0;
}
正常的输出为 0,但是程序却输出 8191,将 64 改为 63 就没有问题了