这个表达是什么意思?

时间:2020-07-02 13:16:06

标签: c++ bit-manipulation operator-keyword

在topcoder上有一篇离散的二进制搜索文章,我遇到了这个表达式。

while(lo & lt; hi ) if(i + j & lt ; = x )

如下所述

我从未见过这个表达“;”在while循环中并在其中使用&。

而且,一般而言,我想知道AND &的位运算符的作用(我知道它在二进制级别是如何工作的,但是我想知道如何在不将数字转换为二进制形式的情况下计算最终结果)以及以下代码中的if语句。

int getMostWork(vector folders, int workers) {
  int n = folders.size();
  int lo = * max_element(folders.begin(), folders.end());
  int hi = accumulate(folders.begin(), folders.end(), 0);

  while (lo & lt; hi) {
    int x = lo + (hi - lo) / 2;

    int required = 1, current_load = 0;
    for (int i = 0; i & lt; n; ++i) {
      if (current_load + folders[i] & lt; = x) {
        // the current worker can handle it
        current_load += folders[i];
      } else {
        // assign next worker
        ++required;
        current_load = folders[i];
      }
    }

    if (required & lt; = workers)
      hi = x;
    else
      lo = x + 1;
  }

  return lo;
}

1 个答案:

答案 0 :(得分:5)

无论您在何处找到此代码,对于“ <”小于运算符来说,这都是HTML的错误格式

<的HTMLcode是&lt;

&lt;的所有序列替换为<,您将得到:

    while (lo < hi) {
        int x = lo + (hi - lo) / 2;

        int required = 1, current_load = 0;
        for (int i = 0; i < n; ++i) {
            if (current_load + folders[i] <= x) {
                // the current worker can handle it
                current_load += folders[i];
            }
            else {
                // assign next worker
                ++required;
                current_load = folders[i];
            }
        }

        if (required <= workers)
            hi = x;
        else
            lo = x + 1;
    }

没有按位AND运算符,只比条件运算符