c++ - c++ for循环中的 bool 运算符

标签 c++ operators

我知道如何用 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/

相关文章:

c++ - 模板化运算符 << 未被识别

C - 我如何一起阅读 * 和 -> ?

c++ - 位操作 : Similar operation results in different results

C++ 如何将对象指针发送到函数(对指针列表进行排序)

c++ - 是什么让 enum -> int 比 enum -> unsigned 转换更好?

c++ - 在 Qt 中围绕 QWidget 拖动对象

c++ - 带有 const char* 的奇怪 std::cout 行为

c++ - 如何创建静态分配的动态大小的数组?

c++ - 在 C++ 中复制 vector 时 vector 运算符 = 出错

c++ - 是否可以将 GTK+ 与 C++ 一起使用?