如何在以下代码中使用垂直条

How the vertical bar is used in following code

本文关键字:垂直 代码      更新时间:2023-10-16

我正在解码一个 c++ 代码,不明白为什么在第 6 行使用竖线。

void build(int id, int l, int r) {
  if (l == r) {
    sum[id] = a[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(id << 1, l, mid);
  build(id << 1 | 1, mid + 1, r); /*what operation does vertical
                                 bar perform with bitwise operator*/
  sum[id] = max(sum[id << 1], sum[id << 1 | 1]);
}

此代码

build(id<<1,l,mid);
build(id<<1|1,mid+1,r);

相当于

build(2*id, l, mid);
build(2*id+1, mid+1, r);

唯一的区别是第一个是由认为(错误地(认为它比第二个更有效的人编写的。一个好的程序员会更喜欢第二个,因为它更容易理解。

|是按位的 or。 它接受两个数字作为操作数,并对两个数字的每个位执行OR

例如,考虑以下拖曳位模式的OR00011010 | 10000111 = 10011111