二进制中1的个数(剑指offer)
来源:互联网 发布:visio 软件架构图 编辑:程序博客网 时间:2024/06/07 01:08
二进制中1的个数
本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:
- 剑指offer中的二进制中1的个数问题
代码如下:
class Solution {public: int NumberOf1(int n) { unsigned int test = 1; int count = 0; while (test){ if (n&test!=0){ count++; } test=test << 1; } return count; }};
输出一直是32,考虑原因int是32位的。测试的输出了每次n&test,结果是正确的,也就是说错误就在if里,突然就想到了运算符的优先级。一查表果然是!的优先级高于&。学习C++的时候一直觉得这些东西根本就不用记,但是也很少练习,弄混了这些基本点出错的时候还是很浪费时间的。一点点练习巩固吧~
附运算符优先级:
(https://gss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/72f082025aafa40f8338d803ad64034f79f01975.jpg%20%E9%A1%BA%E5%BA%8F%E4%BC%98%E5%85%88%E8%A1%A8)
另上面的方法复杂度取决于所在系统int的位数。附复杂度等于二进制中1的个数的代码:
class Solution {public: int NumberOf1(int n) { int count = 0; while (n){ if (n&(n - 1)) count++; n = n&(n - 1); } return count; }};
n&(n-1)的意义是:把一个整数减去1,再和原数作与运算得到的结果是将原数最右边的第一个1变成0,其他不变。(举例就可以发现该规律)
0 0
- 剑指offer:二进制中1的个数
- 剑指offer:二进制中1的个数
- 【剑指offer】二进制中1的个数
- [剑指Offer]二进制中1的个数
- 【剑指offer】二进制中1的个数
- 剑指offer--二进制中1的个数
- 剑指offer:二进制中1的个数
- 剑指offer 二进制中1的个数
- 剑指offer 二进制中1的个数
- 《剑指offer》二进制中1的个数
- 剑指 offer:二进制中1的个数
- 剑指offer-二进制中1的个数
- 剑指offer 二进制中1的个数
- 剑指offer-二进制中1的个数
- 剑指offer 二进制中1的个数
- [剑指offer]二进制中1的个数
- 《剑指offer》-二进制中1的个数
- 剑指offer|二进制中1的个数
- JSP几个常用的内置对象(+Cookie对象)
- 指针的简单定义
- java-异常处理机制
- 链表的简易实现
- win32强化练习5.1_动画秒表(位图初步)
- 二进制中1的个数(剑指offer)
- 初识html
- POJ 2531Network Saboteur(dfs+搜索剪枝)
- JAVA多线程之wait/notify
- 【通用开发框架】一套完整的Android通用开发框架
- java反射机制
- JSP用到的各项配置方法
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 准备开始学硬件的知识(一)