我知道如何用 Java 编程,但我想学习 C++。我正在尝试做一些比赛,他们向您展示一种算法,您尝试使用您想要的任何语言来解决它。
我被困在一种算法上并搜索我发现这段代码可能对我有帮助,但我对 for 循环语句的最后部分有点困惑
int N,K;
scanf("%d %d",&N,&K);
for(int j = 0,x;j<N;++j){
scanf("%d",&x);
x = N+1-x;
for(int idx = x-1;idx>0;idx -= (idx & -idx)) aux2 += T[idx];
我对这部分感到困惑:
idx -= (idx & -idx)
我知道“-=”相当于:
idx = idx - (idx & -idx)
我知道“&”是逻辑运算AND 但我不知道如何用 bool 值操作整数。对于像我这样的 Java 人来说,这有点令人困惑。
我想知道是否有人可以帮助我。
最佳答案
表达式idx -= (idx & -idx)
设置idx
中的最低位,其值为1到0。
例如,10001010010 ==> 10001010000。
所以上面循环中的迭代次数将等于idx
中1的个数。
顺便说一句,执行此操作的更简单方法是使用 idx &= idx-1
。
SWAR Algorithm被认为是计算 1 数量的最有效方法。
关于c++ - c++ for循环中的 bool 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23685006/