ABC23 发表于 2018-3-3 10:16:18

C语言的位运算是什么意思???

请看这个:
rt<<1|1,这个怎么解释(注:这是线段树的代码部分,向递归函数传递参数)

BngThea 发表于 2018-3-3 11:42:32

左移一位,两个数取或运算

ABC23 发表于 2018-3-3 12:01:28

{:10_266:}这个……

ABC23 发表于 2018-3-3 12:02:59

好吧,是我没说清楚。
问的是,为什么这里要有一个|运算??+1不可以吗??

ABC23 发表于 2018-3-3 12:04:47

因为考虑到线段树的特殊性,当前结点的左孩子的值为当前结点值的两倍,右孩子比左孩子大一,那么理论上右孩子的值应该是当前结点的两倍再加一啊??为什么要|运算???

人造人 发表于 2018-3-3 12:45:05

ABC23 发表于 2018-3-3 12:04
因为考虑到线段树的特殊性,当前结点的左孩子的值为当前结点值的两倍,右孩子比左孩子大一,那么理论上右孩 ...

#include <stdio.h>

int main(void)
{
        int test = 1024;
        printf("%d\n", test * 2 + 1);
        printf("%d\n", test << 1 | 1);

        return 0;
}


2049
2049
请按任意键继续. . .

ABC23 发表于 2018-3-3 17:52:59

void PushDown(int rt,int ln,int rn){
        //ln,rn为左子树,右子树的数字数量。
        if(Add){
                //下推标记
                Add+=Add;
                Add+=Add;
                //修改子节点的Sum使之与对应的Add相对应
                Sum+=Add*ln;
                Sum+=Add*rn;
                //清除本节点标记
                Add=0;
        }
}

ABC23 发表于 2018-3-3 17:53:36

代码来自:https://www.cnblogs.com/AC-King/p/7789013.html
页: [1]
查看完整版本: C语言的位运算是什么意思???