题目描述:

/* 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。的更多相关文章

  1. 判断是否含有中文,包含返回true,不包含返回false

    /** * 功能:判断是否含有中文,包含返回true,不包含返回false */ function isChina(s) { var patrn = /[\u4E00-\u9FA5]|[\uFE30- ...

  2. libusb_bulk_transfer返回值不是0

    libusb_bulk_transfer返回值不是0 libusb_bulk_transfer返回值不是0libusb_bulk_transfer返回值不是0 ?????

  3. 服务器返回数组,data[0]得到的总是不对?如何处理?

    我用asp.net MVC 写了服务器代码,返回数组,ajax怎么处理返回的数组内容? 您好,首先用eval将获得的ajax数据转化成json对象并赋值给一个变量. 比如: var obj=eval( ...

  4. spring MVC之返回JSON数据(Spring3.0 MVC)

    方式一:使用ModelAndView的contentType是"application/json" 方式二:返回String的            contentType是&qu ...

  5. [环境搭建]-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的默认处理程序默认情况下只允 ...

  6. iOS返回一个前面没有0,小数点后保留两位的数字字符串

    /* * 处理一个数字加小数点的字符串,前面无0,保留两位.网上有循环截取的方法,如果数字过长,浪费内存,这个方法在优化内存的基础上设计的. */ -(NSString*)getTheCorrectN ...

  7. 使用mysql 统计函数 结果为null时返回值改为0

    SELECT COALESCE(SUM(total),0)  FROM test_table

  8. js 返回一个数组里面0出现的次数

    var num = new Array(10000).fill('').map((item,index) => (index + 1)). 在点号后面补充代码,让num是这个数组中0出现的次数, ...

  9. [Inno Setup] 执行程序,返回值不为0时提示用户

    procedure LoadPerfCounter(); var Ret : Integer; begin if Exec(ExpandConstant('{sys}') + '\lodctr.exe ...

随机推荐

  1. Unity3d 要点板书

    WWW.unity3d.com.cn Unity Project  unity的项目文件/专案 Scene  unity的场景文件 Scene 场景视窗 Game 预览视窗 H... 物件视窗 Pro ...

  2. vs vsvim viemu vax 备忘

    使用gt和gT往返标签 gd:到达光标所在处函数或者变量的定义处. *:读取光标处的字符串,并且移动光标到它再次出现的地方. #:和上面的类似,但是是往反方向寻找. /text:从当前光标处开始搜索字 ...

  3. tomcat最大线程数的设置(转)

    1.Tomcat的server.xml中连接器设置如下 <Connector port="8080" maxThreads="150" minSpareT ...

  4. Struts2相关注意点

    今天开始学习Struts2,有一个小栗子用到了DMI动态方法调用,使用DMI可以减少action的数量简化程序,不用在struts.xml的action中定义method属性.刚开始怎么也不能使用DM ...

  5. springmvc的ModelAndView的简单使用

    参考:http://blog.csdn.net/zzjjiandan/article/details/34089313 先上图: MAVTest.java package com.wyl; impor ...

  6. Jsoup代码解读之一-概述

    Jsoup代码解读之一-概述 今天看到一个用python写的抽取正文的东东,美滋滋的用Java实现了一番,放到了webmagic里,然后发现Jsoup里已经有了…觉得自己各种不靠谱啊!算了,静下心来学 ...

  7. BZOJ 4259 残缺的字符串(FFT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4259 [题目大意] 给出两个包含*和小写字母的字符串,*为适配符,可以和任何字符匹配, ...

  8. HDU 5763 Another Meaning(FFT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5763 [题目大意] 给出两个串S和T,可以将S串中出现的T替换为*,问S串有几种表达方式. [题解 ...

  9. HDU 5145 NPY and girls(莫队算法+乘法逆元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5145 [题目大意] 给出一个数列,每次求一个区间数字的非重排列数量.答案对1e9+7取模. [题解 ...

  10. Sunday字符串匹配算法

    逛ACM神犇的博客的时候看到的这个神奇的算法 KMP吧,失配函数难理解,代码量长 BF吧,慢,很慢,特别慢. BM吧,我不会写... 现在看到了Sunday算法呀,眼前一亮,神清气爽啊. 字符串匹配算 ...