分治算法 php,算法,分治_如何理解这段经典的宏定义?,算法,分治,二分,数据结构和算法,c++ - phpStudy...

如何理解这段经典的宏定义?

#define POW(c) (1 << (c)) //2^c

#define MASK(c) (((unsigned long) -1) / POW(POW(c)) + 1)) //以2^c位为单位分组,相间的全0和全1

// MASK(0) = 55555555(h) = 01010101010101010101010101010101(b)

// MASK(1) = 33333333(h) = 00110011001100110011001100110011(b)

// MASK(2) = 0f0f0f0f(h) = 00001111000011110000111100001111(b)

// MASK(3) = 00ff00ff(h) = 00000000111111110000000011111111(b)

// MASK(4) = 0000ffff(h) = 00000000000000001111111111111111(b)

这是“求二进制中数位1的个数”( see: http://www.cnblogs.com/kaikai/archive/2006/02/15/330901.html)平行算法中经典的宏定义,POW 、 (unsigned long) -1) 和 算法思想 都可以理解,但是 (((unsigned long) -1) / POW(POW(c)) + 1)) 产生的“以2^c位为单位分组,相间的全0和全1”该如何理解呢?(一个全1的无符号数字除以2的2的幂的幂加1,为什么会产生这样相间的二进制结果呢?)

找了一些资料都只有对算法的解释没有对这个宏定义的解释,希望大神解答!~

Thank you!

相关阅读:

react 在服务端渲染 使用material-ui Warning

jQuery的prop()方法疑问

链接器的重定位符号引用

C语言short数据类型在内存中的值

操作的历史记录是否应该区分类型

js里用到多次方然后模除,整型数据溢出

git如何实现如 hg merge 功能

vue 组件data里的数组如何添加新值并触发更新

vue.js列表渲染疑问

在windows下mongodb怎么执行js脚本?

iphone5 4英寸的device-width= 320px

PHP代码不知道哪里错了。

怎样在本地wamp配置从服务器直接下载下来的laravel项目?

Android 用单例(自定义类)+多线程 与 bind service + 多线程 的区别

Go语言编译器, 多版本如何管理, 一个是brew install 安装, 一个是通过源码编译的.

有没类似的插件 可以在一个web界面的手机框里运行一个手机网站

codepen 如何引入第三方库

手机端:touchend触发时,如何获取到触点离开屏幕时的pageX

合并工程之后遇到的问题,主要是文件路径这块

python找出列表中包含重复的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值