编程问题之:x=x&(x-1)
2016-03-05 15:06
267 查看
如下代码输出多少:
输出:
8
这题需要一点数学知识,输出结果是:
转换为二进制之后1的数量
原理:假设一个数有n个1,最低位开始数第一个1(后面都是0),那如果 x-1,必然使得这一位为0,后面都变成1了。
比如:12(1100),那11就是1011
相与必然去掉这个1,但是高位的1不动,于是就得出上述结论了
[code]#include <iostream> using namespace std; int BTcount(int x) { int count = 0; while(x) { x=x&(x-1); count++; } return count; } int main() { cout<<BTcount(9999)<<endl; return 0; }
输出:
8
这题需要一点数学知识,输出结果是:
转换为二进制之后1的数量
原理:假设一个数有n个1,最低位开始数第一个1(后面都是0),那如果 x-1,必然使得这一位为0,后面都变成1了。
比如:12(1100),那11就是1011
相与必然去掉这个1,但是高位的1不动,于是就得出上述结论了
相关文章推荐
- calibre的recipe接口(API)之——参数设置
- java中Class和ClassLoader学习笔记
- JAVA枚举类型
- java常见 集合
- Java web学习(三)
- php-cgi 与 php-fpm 区别?
- PHPmyadmin的安装与配置
- unhashable
- 深入浅出学习struts1框架(五)--正式进入struts1框架学习,从一个实例开始
- Java源码分析:ConcurrentHashMap
- Java 深拷贝和浅拷贝
- 深入浅出学习struts1框架(四):从MVC模式代码认识struts1框架
- 深入浅出学习Struts1框架(三):彻底去掉TestServlet中的字符串和if-else语句块
- 深入浅出学习Struts1框架(二):重构MVC模式代码中跳转路径和业务逻辑
- ASP.NET三层划分与命名方式
- PAT 1007. 素数对猜想 (20);判断一个数为素数;java实现
- 深入浅出学习Struts1框架(一):一个简单mvc模式代码示例开始
- 《Java程序设计基础》 第3章手记
- php编译时出错make: *** [libphp5.la] Error 1
- C++异常基础