(i>>j)&1这个运算的意思是什么,不用位运算的话怎么写?

atcoder beginner contest 249 c题的官方题解,其中出现了(i>>j)&1,不是很理解这个是什么意思。
题解代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n,k;
  cin>>n>>k;
  vector<string> s(n);
  for(int i=0;i<n;i++) cin>>s[i];
  int ans=0;
  for(int i=0;i<(1<<n);i++){
    vector<int> sum(26);
    for(int j=0;j<n;j++){
      if((i>>j)&1){
        for(int x=0;x<s[j].size();x++) sum[s[j][x]-'a']++;
      }
    }
    int now=0;
    for(int j=0;j<26;j++) if(sum[j]==k) now++;
    ans=max(ans,now);
  }
  cout<<ans<<endl;
}


题目链接:
https://atcoder.jp/contests/abc249/tasks/abc249_c
题解链接:
https://atcoder.jp/contests/abc249/editorial/3882

>> 右移运算符
假设 i=2j=1

  1. i 的值 i 的二进制形式 i >> 1 (即i的二进制形式右移1位)
    20010 右移一位是 0001
  2. & 按位相与运算符
    参加运算的两个数据,按 二进位 进行“与”运算。如果两个相应的 二进位 都为 1,则该位的结果值为 1,否则为 0
    0&0=00&1=01&0=01&1=1

引用①的 i>>1 的结果
表达式 (i>>1)&1
i>>1 0001
1 0001
结果 0001 即结果为 1(运算逻辑请参考②)
希望对你有帮助


补充说明:

  1. (i>>j) 等价于 i / pow(2, j), 即 i 除以 2j 次方

  2. 对于 &,有两个二进制数
    a=00000011,b=00000010;
    a&b=00000010
    各个位进行比较都为1的结果为1;否则为0;

i 除以2的j次方后的值取最低的bit位.其实就是取的i值的某个bit位上的值