获取数字的第i位

时间:2018-10-14 11:17:07

标签: c++ bit-manipulation 64-bit bit bit-shift

我先给数字n,然后给n对,类型为ai,其中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

有人知道是什么问题吗?

1 个答案:

答案 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

重复项: