• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 如何理解这段经典的宏定义?

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

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了蹇宏经典拒绝话术,蹇宏经典拒绝话术视频,60年代战士经典宏,excel常用宏 经典,boblen鼠标宏定义等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:如何理解这段经典的宏定义?
描述:

#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!


解决方案1:

这个怎么说呢,因为

      1...n个0...1
     1...n个0...1
    1...n个0...1
 + 1...n个0...1
___________________
   1111111... 1111

选择2^(2^n)+1是为了能除尽,不会有余数,其实只要是 1...n个0...1的这种都可以出现类似的效果

解决方案2:

自问自答一下。
知乎上的提问的回答:http://www.zhihu.com/question/30045208
注意所有的数都是二进制,大概与二进制的加法与乘法有关,实际上跟十进制的运算规则是类似的。
这一点需要深入理解。

再推荐一本最近闲看的书:《编码的奥秘》,里面有对进制深入浅出的探讨。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-06-07 python函数调用的问题
  • 2017-06-07 Java的sdk里有没有触发持久化处理(pfop)的demo啊?
  • 2017-06-07 django发布信息时提示:Outofrangevalueforcolumn'phone_dh'atrow1
  • 2017-06-07 django-pyodbc,安装成功后为什么会缺少三个基类?:BaseDatabaseWrapper等
  • 2017-06-07 macliunx关于在终端中执行rubygem包命令的疑惑?
  • 2017-06-07 stl流和迭代器
  • 2017-06-07 初学,问一个pythonflaskjinja2很简单的问题
  • 2017-06-07 指针的指针所有指针都是放在栈中吗
  • 2017-06-07 求教:Python列表索引超出范围
  • 2017-06-07 jboss里那些文件不可删

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • (python)notepad++有什么方法可以快捷输入字符串
    • 请教如何修改github上仓库的项目的语言类型?
    • redis存储微博点赞的人,如何存储?
    • python爬虫python如何从后往前读取文件?
    • 七牛云可否增加ngx_http_concat模块支持?
    • (python)使用phantomjs时,提取element包含的所有内容?
    • 表单提交的HTML代码该如何处理?
    • (shell)如何修改cat\more\tig命令中的tab为4个空格宽度
    • pythonyield问题?
    • 错错错一错再错七牛云第三方资源抓取报错badtoken

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有