这个 nextPowerOfTwo() 函数的数学原理是啥
实际上,它的目的是要把``v - 1``的最高位为1的位开始,把它及最低位之间的所有位全都变成1。直接看例子吧。比如一个数5 (101)v = 0b101;v --; // v = 0b0000 0100;v |= v \u0026gt;\u0026gt; 1; // v = 0b0000 0110;v |= v \u0026gt;\u0026gt; 2; // v = 0b0000 0111;// ... 下面的就不用写了v ++; // v = 0b0000 1000 就是要的答案从上面的例子就可以看出这个算法的目的,就是要不断的复制已经置为1的最高位。因为第一次右移1位,就把最高位复制了1次;然后第二次就要复制最高的2个位,所以右移2位;下一次就要复制4个位,所以右移4位。如此类推。因为uint是32位,所以只要最后做到16就可以了。为什么要先把``v``减1?如果``v``本身已经是答案的话,运行此算法就会得到``v * 2``,所以先减1。如果``v``是0,那么它减1就是-1,或者说是UINT_MAX,是全1的一个数,最后执行完的结果还是0。
推荐阅读
- 如果你的多肉出现这个长势,要注意这个细节,多肉才会越来越美!
- 『活动』让孩子们欢欢喜喜过新年 这个元旦好有爱!南京聋校举办多种形式庆祝活动
- 免费“单人套餐”背后的故事:爱心让这个冬天不再寒冷
- 夫子庙■“秦淮灯会”“夫子庙小吃”等非遗重点保护 护航夫子庙,这个法明年施行
- 气温■@江苏人,这个周末天气晴!温度缓慢回升,早晚依旧“冻”人
- 黄金时间■黄金时间丨哪种产品最节水?购买产品请注意这个标识!
- 『黄金时间』请认准这个蓝色的标志! 黄金时间丨同行业中用水最少的企业
- 汽车|评测 | 懂你所想,予你所需!依维柯欧胜2021款这个“搭档”可还行?
- 电动车|这个月,原来小编们这么拼
- 漏洞|家里有孩子的,一定不要忽略这个漏洞!警惕!同一小区8人确诊
