【发布时间】:2020-10-23 02:32:58
【问题描述】:
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;
}
【问题讨论】:
-
这些是否可能只是
&lt;是<的转义文本(小于)? -
是的,糟糕的HTML转换应该是
i < n和lo < hi -
while ( foo ; bar)语法无效,查看编译器错误:godbolt.org/z/LUVhso -
您不会转换为二进制。二进制只是一种表示。 17、0b10001、0x11 和 021 是相同的值。位操作用位来描述。也许可以用其他表示来描述这些操作,但它会变得更加复杂。
-
" 不用将数字转换成二进制形式就可以计算出最终结果" 为时已晚。如果数字在 PC 内存中,它们已经是二进制形式。
标签: c++ bit-manipulation operator-keyword