C语言的位运算是什么意思???
请看这个:rt<<1|1,这个怎么解释(注:这是线段树的代码部分,向递归函数传递参数) 左移一位,两个数取或运算 {:10_266:}这个…… 好吧,是我没说清楚。
问的是,为什么这里要有一个|运算??+1不可以吗?? 因为考虑到线段树的特殊性,当前结点的左孩子的值为当前结点值的两倍,右孩子比左孩子大一,那么理论上右孩子的值应该是当前结点的两倍再加一啊??为什么要|运算??? 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
请按任意键继续. . . 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;
}
} 代码来自:https://www.cnblogs.com/AC-King/p/7789013.html
页:
[1]