我先给数字n
,然后给n
对,类型为a
和i
,其中a
代表数字,{{1 }}代表我必须找到的位的位置(从数字i
开始)。
这是我尝试过的:
a
它有效,但是我只得到100分的60分。在网站上用红色表示#include <iostream>
using namespace std;
int main()
{
long long n,i,a,b;
cin>>n;
for (; n; n--) {
cin>>a>>i;
b = (1<<i);
if ((a&b) != 0) cout<<1<<'\n';
else cout<<0<<'\n';
}
return 0;
}
是一个64位有符号整数,因此我使用了a
,而{{1 }}是自然数,long long
有人知道是什么问题吗?
答案 0 :(得分:0)
b
是自然数,0 <=b
<= 63
可能您是说0 <= i <= 63?在这种情况下,问题出在这一行
b = (1<<i);
1是integer literal of type int
,因此如果i> 31,则1 << i
invokes UB不会给您期望的64位值。您需要
b = 1ULL << i
后缀U
用于无符号,当将1移入符号位时后缀UB避免,LL
后缀用于long long
重复项: