temp = (temp 0x55555555) + ((temp 0xaaaaaaaa) 1)
代码如下,调用func(0x11530828):
int func(unsigned int i) {
unsigned int temp = i;1:temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1);2:temp = (temp & 0x33333333) + ((temp & 0xcccccccc) >> 2);3:temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4);4:temp = (temp & 0x00ff00ff) + ((temp & 0xff00ff00) >> 8);5:temp = (temp & 0x0000ffff) + ((temp & 0xffff0000) >> 16); return temp;}
对1、2、3、4、5整理,如下:
1:temp = (temp & 0x55555555) + ((temp >> 1)& 0x55555555);2:temp = (temp & 0x33333333) + ((temp >> 2) & 0x33333333);3:temp = (temp & 0x0f0f0f0f) + ((temp >> 4) & 0x0f0f0f0f);4:temp = (temp & 0x00ff00ff) + ((temp >> 8) & 0x00ff00ff);5:temp = (temp & 0x0000ffff) + ((temp >> 16) & 0x0000ffff);
输入:temp=0001 0001 0101 0011 0000 1000 0010 1000
序号1的代码等价于:将temp中32位二进制码,从低位到高位起,2位作为一个整体,对这个整体做第2位加第1位,总共会出现三种情况:10、01、11,相加后的结构分别为01、01、10,下面对temp进行上述规则处理:
原始数据:00 01 00 01 01 01 00 11 00 00 10 00 00 10 10 00
处理后的:00 01 00 01 01 01 00 10 00 00 01 00 00 01 01 00(运行代码1之后temp的值);
序号2的代码等价于:将temp中32位二进制码,从低位到高位起,4位作为一个整体,对这个整体做第4位加第2位、第3位加第1位,每次相加只会出现三种情况:10、01、11,相加后的结构分别为01、01、10,下面对temp进行上述规则处理:
处理前:0001 0001 0101 0010 0000 0100 0001 0100
处理后:0001 0001 0010 0010 0000 0001 0001 0001
序号3的代码等价于:将temp中32位二进制码,从低位到高位起,8位作为一个整体,对这个整体做第8位加第4位、第7位加第3位、第6位加第2位、第5位加第1位,每次相加只会出现三种情况:10、01、11,相加后的结构分别为01、01、10,下面对temp进行上述规则处理:
处理前:00010001 00100010 00000001 00010001
处理后:00000010 00000100 00000001 00000010
序号4的代码等价于:将temp中32位二进制码,从低位到高位起,16位作为一个整体,对这个整体做第16位加第8位、第15位加第7位、第14位加第6位、第13位加第5位、第12位加第4位、第11位加第3位、第10位加第2位、第9位加第1位,每次相加只会出现三种情况:10、01、11,相加后的结构分别为01、01、10,下面对temp进行上述规则处理:
处理前:0000001000000100 0000000100000010
处理后:0000000000000110 0000000000000011
同上,对于序号5的代码:
处理前:00000000000001100000000000000011
处理后:00000000000000000000000000001001
所以输出结果为:9。
temp = (temp 0x55555555) + ((temp 0xaaaaaaaa) 1)相关推荐
- python的0x55555555和0xaaaaaaaa
仅作为记录,大佬请跳过. 参考 传送门
- python里面temp是啥-Python tempfile模块学习笔记(临时文件)
tempfile.TemporaryFile 如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择.其他的应用程序是无法找到 ...
- psql -d temp 时候的txid_current!
这样就链接到了temp数据库了 ztz123@ubuntu:~$ psql -d temp psql (11.2) Type "help" for help.temp=# sele ...
- linux temp文件夹在哪_手机文件夹是英文不敢乱删?找出这5个文件夹,手机瞬间轻松6个G...
很多朋友都想问,明明刚用没多久的手机,天天卡到怀疑人生,用手机清理软件里里外外清理了好几遍,还是没有任何改变.翻翻文件夹全是英文,又不敢随便清理,为啥国产手机文件夹全是英文,咱也不敢问,简直难过的想流 ...
- 清楚C盘中的临时文件user AppData Local Temp
那是临时文件,全删了,没用的文件. 网上有一招可以帮你清理系统中的垃圾文件. 首先新建一个文本文档,然后打开 将以下代码复制进去保存: @echo off echo 正在清除系统垃圾文件,请稍等... ...
- 关于C盘的Temp里的垃圾文件如何清理!
苦主诉说:C:\Documents and Settings\Administrator\Local Settings\Temp 里面的是垃圾文件生崽子的地方..其中有35个死垃圾文件删除不掉..超级 ...
- linux temp文件夹在哪_全方位剖析 Linux 操作系统,太全了
Linux 简介 UNIX 是一个交互式系统,用于同时处理多进程和多用户同时在线.为什么要说 UNIX,那是因为 Linux 是由 UNIX 发展而来的,UNIX 是由程序员设计,它的主要服务对象也是 ...
- 疑难杂症篇(十五)--winXP下出现“安装向导无法创建文件夹‘C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\is-PCCET.tmp‘“问题的解决方案
本博文将给出winXP系统下,出现"安装向导无法创建文件夹'C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\is-PCCET.tmp 错误82:无法创建目录或文件&quo ...
- 耐人寻味的Temp文件(三)
temp是什么文件夹? Temp :临时文件夹 回答1. 临时文件夹.可以删除的在电脑屏幕的左下角按"开始→程序→附件→记事本",把下面的文字复制进去(黑色部分),点" ...
最新文章
- 软件工程采取了哪些措施以保证最终能够交付给用户一个高质量、低成本的软件产品?
- 创意三维c4d形式设计节气海报学习案例
- 解读:计数器Counter
- 实验4-1-2 求奇数和 (15 分)
- 营销再好终归还要产品说话,留给大神X7的时间不多了
- Qt的QPushButton设置图标,设置一组互斥键
- 桌球小游戏(java)编程
- C#窗体标准计算器(上) 初级新手请多担待。
- CAN FD Bit Timing
- 路侧停车系统有利有弊
- 如何关闭谷歌浏览器Google Chrome的阅读清单功能
- Android 锁屏,息屏情况下打开界面Activity,类似微信视频通话接电话时弹出接电话的界面
- 关于联想Y700,玩游戏闪屏
- 计算机专业分类分级,计算机等级分级
- 镜像网站 | 淘宝镜像网站
- linux展示表空间大小,oracle中看表空间大小等
- MySql求第二高薪水
- 甲骨文蟾蜍 Toad for Oracle 16.2 注册版
- header = struct.pack(!i, n) struct.error: 'i' format requires -2147483648 number 2147483647
- 回文是指正读反读均相同的字符序列;如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。