求整数二进制中1的个数
2016-03-02 19:09
302 查看
题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 输入: 输入可能包含多个测试样例。 对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。 。n保证是int范围内的一个整数。 输出: 对应每个测试案例, 输出一个整数,代表输入的那个数中1的个数。 样例输入: 3 4 5 -1 样例输出: 1 2 32
算法一:令flag = 1,作为标志位。首先将整数n和flag做与(&)运算,判断n的最低位是不是1。接着将1进行左移一位得到flag = 2,再和n进行与运算,继续判断n的次低位是不是1......反复将flag进行左移一位,一直到最高位。每次都能判断n的其中一位是不是1。
int countsOfOne(int number) { int flag = 1; int counts = 0; while (flag) { if (number & flag) { counts++; } flag = flag << 1; } return counts; }
算法二:把一个整数减去1,再和原整数做与运算,会把该整数最右边的一个1变成0.那么一个整数的二进制中有多少个1,就是可以进行多少次这样的操作。
int countsOfOne(int number) { int counts = 0; while (number) { counts++; number = number & (number - 1); } return counts; }
相关文章推荐
- 使用多线程去复制一个文件,我们可以指定文件名和线程数
- https://localhost:1158/em 页面无法打开的问题
- 从尾到头打印链表
- 基于定时器的动画和性能调优
- Table边框使用总结 ,只显示你要显示的边框
- 用Struts2来完成一个学生注册界面
- Tencent APT性能测试工具
- ASM 磁盘 目录 管理
- CF Round 8VC (A. Orchestra暴力)
- 双核心四线程变成单核心单线程,肿么办
- php serialize与unserialize函数
- 大型分布式网站架构技术总结
- RelativeLayout加上android:layout_alignParentBottom="true"让某一部分靠最底部
- dd详解
- 2094
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- Android Studio怎么关联supportV4的源码
- 大型网站架构系列:电商网站架构案例(3)
- 2527: [Poi2011]Meteors|整体二分
- 创建一个简单的HTTP服务(自动查找未使用的端口)