码迷,mamicode.com
首页 > 编程语言 > 详细

(新人的第一篇博客)树状数组中lowbit(i)=i&(-i) 的简单文字证明

时间:2016-04-08 19:47:37      阅读:1309      评论:0      收藏:0      [点我收藏+]

标签:

第一次写博好激动o(≧v≦)o~~初一狗语无伦次还请多多指教
 
先了解树状数组http://blog.csdn.net/int64ago/article/details/7429868感觉这个前辈写的很好
 
但是里面提到的lowbit则是一笔带过,那么lowbit究竟是个什么鬼呢???
 
首先明白一个概念,计算机中-i=(i的取反+1),也就是i的补码
而lowbit,就是求(树状数组中)一个数二进制的1的最低位,例如01100110,lowbit=00000010;再例如01100000,lowbit=00100000。
所以若一个数(先考虑四位)的二进制为abcd,那么其取反为(1-a)(1-b)(1-c)(1-d),那么其补码为(1-a)(1-b)(1-c)(2-d)。
如果d为1,什么事都没有-_-|||但我们知道如果d为0,天理不容2Σ( ° △ °|||)︴
于是就要进位。如果c也为0,那么1-b又要加1,然后又有可能是1-a……直到碰见一个为补码为0的bit,我们假设这个bit的位置为x
这个时候可以发现:是不是x之前的bit的补码都与其自身不同?,x之后的补码与其自身一样都是0?
例如01101000,反码为10010111,补码为10011000,可以看到在原来数正数第五位前,补码的进位因第五位使其不会受到影响,于是0&1=0,;
但在这个原来数“1”后,所有零的补码都会因加1而进位,导致在这个“1”后所有数都变成0,再加上0&0=0,所以他们运算结果也都是零;
只有在这个数处,0+1=1,连锁反应停止,所以这个数就被确定啦O(∩_∩)O
所以and以后只有x这个bit是一……

证毕什么的我才不说呢

(新人的第一篇博客)树状数组中lowbit(i)=i&(-i) 的简单文字证明

标签:

原文地址:http://www.cnblogs.com/MyNameIsPc/p/5369330.html

(0)
(4)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!