当x含有偶数个1,返回1,否则为0。
题目描述:
/* Return 1 when x contains an even number of 1s;0 otherwise. Assume W=32 */
int even_ones(unsigned x);
函数应该遵循位级整数编码规则,不过你可以假设数据类型int 有w=32位。
你的代码最多只能包含12个算术运算、位运算和逻辑运算。
代码如下:
int even_ones(unsigned x)
{
x = x ^ (x >> );
4 x = x ^ (x >> );
x = x ^ (x >> );
x = x ^ (x >> );
x = x ^ (x >> );
return !(x & );
}
代码分析:
我们首先用一个具体的数据来测试这段代码,比如我们用444164这个数字,444164的二进制为1101100011100000100.
第一次异或操作:
00000000000001101100011100000100
^
00000000000000110110001110000010
=
00000000000001011010010010000110
关于得出的这个结果,我们认为右起的第i位,表示原数第i位和第i+1位中包含1的奇偶情况。比如右起第0位为0,则原数第0和第1位包含1的个数为偶;而右起第1位为1,则原数第1位和第2位包含1的个数为奇。。。
为什么可以得出这个结论呢?x >> 1,我们假设这个数为x',而x'的第i位数实际上就是x的第i+1位,所以x ^ x',实际就是x的第i位与第i+1位异或,而异或的定义为相同为0,不同为1,所以如果这两位都为1或都为0,包含偶数个1,则结果为0,反之亦然。
第二次异或操作:
00000000000001011010010010000110
^
00000000000000010110100100100001
=
00000000000001001100010110100111
关于得出的这个结果,我们认为右起的第i位,表示原数第i位和第i+1,i+2,i+3位中包含1的奇偶情况。为什么能得出这样的结论?我们先看第一次操作的结果,第0位表示原数的第0和第1位的情况,第1位表示原数第1位和第2位的情况,第2位表示原数第2位和第3位的情况。。。我们假设第2次异或操作的数为x2,而x2 >> 2 的结果为 x2',这时,x2'的第0位其实是x2的第2位,所以x2 ^ x2' 实际上是x2的第i位和第i+2位的异或,而我们前面提到 第0位表示原数的第0和第1位的情况,第2位表示原数第2位和第3位的情况,所以第二次操作得出的结果的第i位是 x2的第i位和第i+2位的异或,即表示原数第i位和第i+1,i+2,i+3位中包含1的奇偶情况。
剩下的几次异或操作分析很上面类似。。。
整个操作的形式化表示如下:
1.x ^ (x >> 1)
x: 
x >> 1:
x ^ (x >> 1):
2.x ^ (x >> 2)
x: 
x >> 2:
x ^ (x >> 2):
3.x ^ (x >> 4)
x: 
x >> 4:
x ^ (x >> 4):
4.x ^ (x >> 8)
x: 
x >> 8:
x ^ (x >> 8):
5.x ^ (x >> 16)
x: 
x >> 16:
x ^ (x >> 16):
参考博客:http://www.matrix67.com/blog/archives/264
当x含有偶数个1,返回1,否则为0。的更多相关文章
- 判断是否含有中文,包含返回true,不包含返回false
/** * 功能:判断是否含有中文,包含返回true,不包含返回false */ function isChina(s) { var patrn = /[\u4E00-\u9FA5]|[\uFE30- ...
- libusb_bulk_transfer返回值不是0
libusb_bulk_transfer返回值不是0 libusb_bulk_transfer返回值不是0libusb_bulk_transfer返回值不是0 ?????
- 服务器返回数组,data[0]得到的总是不对?如何处理?
我用asp.net MVC 写了服务器代码,返回数组,ajax怎么处理返回的数组内容? 您好,首先用eval将获得的ajax数据转化成json对象并赋值给一个变量. 比如: var obj=eval( ...
- spring MVC之返回JSON数据(Spring3.0 MVC)
方式一:使用ModelAndView的contentType是"application/json" 方式二:返回String的 contentType是&qu ...
- [环境搭建]-Web Api搭建到IIS服务器后PUT请求返回HTTP Error 405.0 - Method Not Allowed 解决方法 转摘:http://blog.csdn.net/qiujuer/article/details/23827531
尝试使用微软的Web Api,他的确是一个很有意思的东西. 让我体会到了许多的方便,但是我发现部署到IIS服务器上去了后PUT和Delete请求将返回405. 原因是IIS的默认处理程序默认情况下只允 ...
- iOS返回一个前面没有0,小数点后保留两位的数字字符串
/* * 处理一个数字加小数点的字符串,前面无0,保留两位.网上有循环截取的方法,如果数字过长,浪费内存,这个方法在优化内存的基础上设计的. */ -(NSString*)getTheCorrectN ...
- 使用mysql 统计函数 结果为null时返回值改为0
SELECT COALESCE(SUM(total),0) FROM test_table
- js 返回一个数组里面0出现的次数
var num = new Array(10000).fill('').map((item,index) => (index + 1)). 在点号后面补充代码,让num是这个数组中0出现的次数, ...
- [Inno Setup] 执行程序,返回值不为0时提示用户
procedure LoadPerfCounter(); var Ret : Integer; begin if Exec(ExpandConstant('{sys}') + '\lodctr.exe ...
随机推荐
- MVC多表联合查询数据显示
随然做过几年.net开发,但一直没有做过MVC框架下的网站,这段时间无事,学习一下.下面的方法是我摸索过程中的一点总结,如果有更好的方法,欢迎告诉我,谢谢. 这段时间我只看了MVC和LinQ两本书,关 ...
- 测试heightlight
var a = '综合型律师事务所'; if (a == '综合型律师事务所') { initradio('ls_classes', '综合型律师事务所'); } else { initradio(' ...
- poj3308
二分图的最小点权覆盖,选定点集,与该点集有关的边覆盖所有顶点,且该点集的点权值和最小. 有类似于匈牙利算法一样的带权匹配算法,但是这里就不介绍了.个人比较推荐,用最大流算法更好理解,写起来更容易. 题 ...
- hdu 4454 Stealing a Cake (三分)
Stealing a Cake Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- linux之awk
相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理. 因此,awk 相当的适合处理小型的数据数据处理呢! awk 通常运作的模式是这样的: [root@linu ...
- 重拾javascript动态客户端网页脚本
笔记一: 一.DOM 作用: · DOM(Doument Object Model) 1.document文档 HTML 文件 (标记语言) <html> < ...
- 将内部部署网络和 Windows Azure 集成的新选项: 使用AT&T
关于云计算的主要对话围绕着向云迁移展开.今天,我们宣布与 AT&T 结为战略联盟,共同为客户提供云计算服务.这一合作伙伴关系将授权客户访问 Windows Azure,作为其现有数据中心的逻辑 ...
- zzbank oneOpencloud Env linuxaix6.1 interactiveMaintain(nfs,aix genintall基于系统iso光盘,aix6.1 puppet-Agent,Cent6.4 puppetServer,agent time no syn case Er)
1,puppet--server,Client,Agent time no syn case eror puppet agent --server frontend -terr: Could not ...
- Drupal7模块multiselect使用
Drupal二次开发的时候,我们时常要使用到多选列表,但是官方默认的多选下拉列表,是在不敢恭维如下图所示: 不过难看不可怕,Drupal有两万第三方模块做支撑,只有你想不到,没有找不到的. 功夫不负有 ...
- 删除input或textarea输入框在移动版显示的阴影(Safari/iPhone)
移动端浏览网页元素时,自动给input和textarea添加了内部阴影的效果,只需加入样式即可去除 input,textarea{-webkit-appearance: none;} input[ty ...