判断一无符号整数的二进制形式中是否包含偶数个1
来源:互联网 发布:淘宝模特拍摄视频教程 编辑:程序博客网 时间:2024/04/29 09:55
题目要求:若二进制无符号整数x包含偶数个1,返回1,否则返回0.
要求:只能使用位运算、加减法和==、!=,最多包含12个算术运算、位运算和逻辑运算,可以假设sizeof(unsigned)==4
不能使用乘除模运算,不能使用条件分支,循环,函数调用,大小比较等(详见《深入理解计算机系统》第二章习题)
代码如下:
- int even_ones(unsigned x )
- {
- unsigned x16 = (x>>16)^x;
- unsigned x8 = (x16>>8)^x16;
- unsigned x4 = (x8>>4)^x8;
- unsigned x2 = (x4>>2)^x4;
- unsigned x1 = (x2>>1)^x2;
- return (~x1)&0x1;
- }
思路:最直接的思路是分别把各位移动到最低位,然后与1,把各结果相加,得到1的个数。但明显这超出了题目限制。看来求和是行不通的。看到题目中只要求判断是否偶数个1.这里可能有窍门,应该会有一种方法虽然没有求出1的个数,但可以判断是否偶数个,异或是个神奇的运算,或许可以帮上忙。另外,32位实在太长,若用分治法逐个字节求出再总和似乎也不行。那使用字节两两运算呢?尝试中在纸上瞎写,突然想起,1和1异或为0,一下子消去了两个1.一个数减去2奇偶性不变,哦,最关键的思路出来了。把x对半,异或后得到的结果1的个数的奇偶性与x一致。重复此过程,把x折叠,最有得到只剩一位。因为偶数个要返回1,这时取反一下,取出最低位,即可!
转自:http://blog.csdn.net/zhzhanp/article/details/6324511#
- 判断一无符号整数的二进制形式中是否包含偶数个1
- 判断一无符号整数的二进制形式中是否包含偶数个1
- 求整数的二进制形式中包含1的个数
- 计算二进制整数中有多少个1 判断是否为2的n次幂
- 整数二进制形式中1的个数
- 判断32位无符号整数二进制中1的个数
- 算法的强大——快速计算一个正二进制整数中包含多少个1
- 求整数N的二进制形式中1的个数
- 整数n的二进制形式中1的个数
- 统计某个整数的二进制形式中1的个数
- 一个整数转化为二进制形式,判断有多少个1
- 计算整数的二进制中包含1的数量
- 如何判断整数x的二进制中含有多少个1
- 如何判断一个整数位的二进制中有多少个1
- 判断一个数字的二进制形式中1的个数
- 判断一个整数的二进制数有多少个1
- 1.求一个整数的二进制中1的个数 2.判断一个数是否是2的n次方
- CI5.6-交换整数二进制形式中的奇数偶数位
- 学WORD-替换换行符
- 常用的webservice接口
- 云计算标准化以及互操作性方面的标准
- [技术分享]20120628TMG 日志队列突然增长怎么办
- WCHAR and wchar_t 的区别 (zz)
- 判断一无符号整数的二进制形式中是否包含偶数个1
- SQLserver数据类型
- 关于OLEDB导入Excel数据,产生科学计数法问题
- Debian中安装VMware-tools
- 文件目录查看及文件选择
- gcc编译器
- 入门级Ibatis案例
- VC6.0
- 测试软件LoadRunner 测试 安装(一)